Pythonで、文字列の一部の文字を変更する


このエントリーをはてなブックマークに追加

Pythonの文字列は、作成後に変更することができない。
例えば、ある文字列strの3文字目を'z'に書き換えるつもりで以下のようなコードを書くと

#!/bin/env python
# -*- coding: utf-8 -*-

str = "abcdefghi"
str[2] = 'z'

以下のようなエラーが出て実行ができない。

Traceback (most recent call last):
  File "string.py", line 5, in <module>
    str[2] = 'z'
TypeError: 'str' object does not support item assignment

方法は2通り。

方法1: 文字列をいったんリストに変換する方法

文字列をばらしてリストを生成することで、文字を自由に編集できるようになる。編集し終われば、またリストから文字列に戻せばよい。

#!/bin/env python
# -*- coding: utf-8 -*-

# 元の文字列
str = "abcdefghi"

# いったんリストにする
str_list = list(str)
print(str_list)

# リストの3番目の要素を'z'で上書き
str_list[2] = 'z'

# またリストから文字列へ戻す
str_changed = "".join(str_list)
print(str_changed)

実行結果は以下のようになる。

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
abzdefghi

方法2: スライスを使う方法

スライスを使い、「元文字列の2文字目まで」+ 'z' + 「元文字列の4文字目以降」として新しい文字列を構成する。

#!/bin/env python
# -*- coding: utf-8 -*-

# 元の文字列
str = "abcdefghi"

# スライスをうまいこと使う
# 「元文字列の2文字目まで」+ 'z' + 「元文字列の4文字目以降」
str_changed = str[:2] + 'z' + str[3:]
print(str_changed)

実行結果は以下のようになる。

abzdefghi