LoginSignup
26
23

More than 5 years have passed since last update.

【Python】文字列の指定位置をある文字で置き換える

Last updated at Posted at 2019-04-19

'123456'3番目と4番目の位置にある'34''ab'で置き換えた文字列('12ab56')が取得したい時

方法は3つある(ほかにもたくさんありそうだけど...)

  1. strを一度、listにしてから置き換える
  2. 置き換える文字の前後をsliceで取得し、結合する
  3. replace()で置き換える(失敗)

strを一度、listにしてから置き換える

strで指定位置を置き換えようとするとエラーになる

>>> s = '123456'
>>> s[2:4] = 'ab'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

'str' object does not support item assignment

'str'オブジェクトはアイテム割り当てをサポートしていません

だから、一度listにしてから置き換える

>>> s = list('123456')
>>> s[2:4] = 'ab'
>>> s
['1', '2', 'a', 'b', '5', '6']
>>> "".join(s)
'12ab56'

この方法で、リストデータの内容を書き換え、文字を置き換えた新たな文字列を作り出せる。

置き換える文字の前後をsliceで取得し、結合する

>>> s = '123456'
>>> s[:2] + 'ab' + s[4:]
'12ab56'

この方法でも、文字を置き換えた新たな文字列を作り出せる。

replace()を使う(位置を指定した置き換えには使えない)

replace()を使うことでも実現できると思ってやったみた。

でも、もし、指定位置の文字が前にあったときに、意図しない結果になってしまうため、replace()ではだめ

# この場合はOK
>>> s = '123412'
>>> s.replace(s[:2], 'ab', 1)
'ab3412'

指定位置の前に同じ文字があるため、意図しない結果になる

# '1234ab'となってほしかった
>>> s = '123412'
>>> s.replace(s[4:6], 'ab', 1)
'ab3412'

参考文献

26
23
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
23