در ابتدا باید این را بدانید که رشته ها در پایتون غیرقابل تغییر می باشند و تغییر یک کاراکتر از یک رشته در پایتون به سادگی انجام این کار در یک لیست نیست.
اما نگران نباشید این کار چندان هم دشوار نیست.
برای درک بهتر ابتدا همین کار را در یک لیست انجام می دهیم:
>>> my_list = ['a', 'b', 'c', 'd'] >>> my_list[2] = 'e' >>> my_list ['a', 'b', 'e', 'd']
دیدید که در لیست به سادگی میتوان این کار را انجام داد اما اگر همین اعمال را برای رشته ها انجام دهید با TypeError مواجه خواهید شد:
>>> my_str = 'abcd' >>> my_str[2] = 'e' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'str' object does not support item assignment
برای انجام چنین کاری روش های متفاوتی وجود دارد که در این پست به دو روش اشاره خواهیم کرد.
روش اول:
در این روش ابتدا رشته ی مورد نظر را به لیست تبدیل کرده و سپس بر اساس ایندکس کاراکتر مورد نظر آن را تغییر می دهیم و در آخر به کمک متد join لیست را به یک استرینگ تبدیل می کنیم.
>>> my_str = 'abcd' >>> my_list = list(my_str) >>> my_list[2] = 'e' >>> my_str = ''.join(my_list) >>> my_str 'abed'
روش دوم:
این روش کمی از روش اول ساده تر است و همچین با انجام تست های لازم متوجه خواهید که سریعتر از آن نیز می باشد.
>>> my_str = 'abcd' >>> my_str = my_str[:2] + 'e' + my_str[3:] >>> my_str 'abed'
کدام یکی سریعتر است؟
روش اول:
>>> timeit.timeit("my_str = 'abcd'; my_list = list(my_str); my_list[2] = 'e'; my_str = ''.join(my_list)", number=10000000) 2.8461143329986953
روش دوم:
>>> timeit.timeit("my_str = 'abcd'; my_str = my_str[:2] + 'e' + my_str[3:]", number=10000000) 1.637490514000092
* با توجه به تست زمان در هر دو روش این موضوع اثبات میشود که روش دوم سریعتر از روش اول می باشد.