例えば、abcde
の3番目c
をx
で置き換えた文字列(abxed
)が取得したい時。
方法は3つ。
- strを一度、listにしてから置き換える
- 置き換える文字の前後をsliceで取得し、結合する
- 文字の重複がない場合はreplaceで置き換える
strを一度、listにしてから置き換える
strのまま指定位置を置き換えようとするとエラー
>>> s = 'abcde'
>>> s[2] = 'x'
Traceback (most recent call last):
File "Main.py", line 2, in <module>
s[2] = 'x'
TypeError: 'str' object does not support item assignment
だから、一度listにしてから置き換える
>>> l = list('abcde')
>>> print(l)
>>> l[2] = 'x'
>>> print(l)
['a', 'b', 'c', 'e', 'd']
['a', 'b', 'x', 'e', 'd']
>>> print("".join(l))
'abxde'
この方法で、リストデータの内容を書き換え、文字を置き換えた新たな文字列を作り出せる。
置き換える文字の前後をsliceで取得し、結合する
>>> s = 'abcde'
>>> print(s[:2] + 'x' + s[3:])
'abxde'
この方法でも、文字を置き換えた新たな文字列を作り出せる。
個人的にはこっちの方が好き。
文字の重複がない場合はreplaceで置き換える
例のように c
を x
でというように置き換えたい文字が特定できており、かつその文字が1度しか登場しない場合は、replace
で置き換えられる。
>>> s = 'abcde'
>>> s = s.replace('c', 'x')
>>> print(s)
'abxde'
ただし、abaade
など a
が何度も現れるような文字列では全ての a
が置き換わってしまうので注意。
@dfghdfdjftyfghvgjhk さんありがとうございます。