-5
response = [0, 1, 2]
for i in response:
    response[i] = tags_re.sub('', response[i])

"'TypeError: list indices must be integers, not str'"

そのリストを編集するには?

リストのすべての要素を変更する必要があります

4

4 に答える 4

2

for <var> in <collection>リストを反復処理し、要素にバインド<var>します。インデックスではありません。(あなたの場合、それはインデックスとして機能するかもしれませんが、あなたが例を提供しているだけかどうかはわかりませんので、一般的なケースに答えます.)つまり、このスニペットではコード:

response = ["one", "two", "three"]
for i in response:
  print i

i"one""two"、および " " になりthreeます。

実際の値ではなく、インデックスが必要なようです。その場合は、次を使用する必要がありますenumerate

response = ["one", "two", "three"]
for i, val in enumerate(response):
  response[i] = rotate_by_13(val)

リストのすべての要素に関数を適用する場合は、リスト内包表記も使用できます。

response = ["one", "two", "three"]
response = [rotate_by_13(e) for e in response]

またはmap関数:

response = ["one", "two", "three"]
response = map(lambda e: rotate_by_13(e), response)
于 2013-05-20T20:29:53.713 に答える
0

あなたのリストは実際には["1", "2", "3"]. への呼び出しを変更response[i]response[int(i)]て、文字列を整数に変換します。

それがリストの形式でない場合は、代わりにこのリスト内包表記のようなことを行うことができます

response = [tags_re.sub(my_magic_regex, elem) for elem in response]

これにより、response が新しいリストに置き換えられます。各要素は、何を実行しても実行された後の古い要素tags_re.sub()です。これは、リストの要素が使用できることを前提としていることに注意してくださいsub()(意図的に文字列に変換されてstr(elem)いるか、すでに文字列になっています)。

于 2013-05-20T20:23:19.417 に答える
0

まず第一に、リストを繰り返し処理しながらリストを編集したくはありません。あなたは悪い時間を過ごすつもりです。(エントリの追加と削除についてはさらにそうですが、それは単なる良い習慣です。)

次のようなものが必要です。

list1 = [1,2,3,4]
list2 = []

for i in list1:
    temporaryVariable = doSomethingTo(i)
    list2.append(temporaryVariable)
list1 = list2

2 番目の問題はインデックスです。変数名の最後で使用しているため、リスト内の th 項目[n]を呼び出そうとしています。nresponse

>>>x = [1,2,3]
>>>x[1]
2
>>>x[2] = "airplane"
>>>x[2]
'airplane'
于 2013-05-20T22:13:25.050 に答える