代わりにこれを試してください:
for i in xrange(len(data)):
data[i] = "everything"
あなたが抱えている基本的な問題は、リストであると書くとき、リストへの数値インデックスである整数であるdata[i]
必要があるということです。しかし、ループではdata
i
for item in data
item
リストにある実際のもの、つまり文字列であり、ものの数値インデックスではありません。xrange
リスト内の値の代わりに数値を生成するイテレータなので、それを使用できます。
代替案は
for i, _ in enumerate(data):
data[i] = "everything"
このenumerate
関数は、フォームのタプルに対するイテレータを提供する(index, item)
ので、インデックスを取得して項目を忘れるだけで済みます。リストはその長さを変数に格納するため、リスト要素をカウントせずにすばやくアクセスできると思うので、いずれかの方法 (enumerate
または) が大幅に高速化または改善されるかどうかはわかりません。xrange
ただし、新しいリスト値を計算するために古いリスト値が必要な場合は、enumerate
Python がリスト内の要素をルックアップするのを避けるため、この方法はおそらくわずかに高速になります。
for i, item in enumerate(data):
data[i] = func(item)
ただし、この種のことは、リスト内包表記としてより適切に表現されます。
data = [func(item) for item in data]
これを行うと、Python は の各項目を調べて関数を適用し、結果から新しいリストを自動的に作成するので、 の結果をリストの正しい場所に配置するdata
ことを心配する必要はありません。func(item)
元の例は、実際には次のように表現できます
data = ["everything" for item in data]