(文字列の)リスト内のアイテムにアクセスし、そのアイテムを(文字列として)変更し、同じインデックス内のリストに戻す必要があるという予感があります
アイテムを同じインデックスに戻すのが難しい
for item in list:
if "foo" in item:
item = replace_all(item, replaceDictionary)
list[item] = item
print item
今、私はエラーが発生します
TypeError: list indices must be integers, not str
この行によりlist[item] = item
理にかなっています!しかし、私はPythonを使用して同じインデックスのリストにアイテムを戻す方法がわかりません
これの構文は何ですか?理想的には、forループは現在のインデックスを追跡できます。
これを行うことができます:
for idx, item in enumerate(list):
if 'foo' in item:
item = replace_all(...)
list[idx] = item
列挙関数を使用する必要があります: python docs
for place, item in enumerate(list):
if "foo" in item:
item = replace_all(item, replaceDictionary)
list[place] = item
print item
また、Pythonで予約されているWordであるため、Wordリストを変数として使用することはお勧めできません。
列挙に問題があるため、 itertools ライブラリからの代替:
for place, item in itertools.Zip(itertools.count(0), list):
if "foo" in item:
item = replace_all(item, replaceDictionary)
list[place] = item
print item
リストのすべての要素を変更する一般的なイディオムは次のようになります。
for i in range(len(L)):
item = L[i]
# ... compute some result based on item ...
L[i] = result
これは、enumerate()を使用して次のように書き換えることができます。
for i, item in enumerate(L):
# ... compute some result based on item ...
L[i] = result
列挙 を参照してください。
Python 3:
ListOfStrings = []
ListOfStrings.append('foo')
ListOfStrings.append('oof')
for idx, item in enumerate(ListOfStrings):
if 'foo' in item:
ListOfStrings[idx] = "bar"