web-dev-qa-db-ja.com

pythonリスト内のアイテムを変更し、リストに保存し直す

(文字列の)リスト内のアイテムにアクセスし、そのアイテムを(文字列として)変更し、同じインデックス内のリストに戻す必要があるという予感があります

アイテムを同じインデックスに戻すのが難しい

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ループは現在のインデックスを追跡できます。

27
CQM

これを行うことができます:

for idx, item in enumerate(list):
   if 'foo' in item:
       item = replace_all(...)
       list[idx] = item
45
Cat Plus Plus

列挙関数を使用する必要があります: 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
7
Spencer Rathbun

リストのすべての要素を変更する一般的なイディオムは次のようになります。

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

列挙 を参照してください。

4
Ershadul

Python 3:

ListOfStrings = []
ListOfStrings.append('foo')
ListOfStrings.append('oof')
for idx, item in enumerate(ListOfStrings):
if 'foo' in item:
    ListOfStrings[idx] = "bar"
0
Matthew Cox