-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

3
response = [0, 1, 2]
for i in range(len(response)):
    response[i] = tags_re.sub('', response[i])

甚至更好地尝试列表理解

response = [...]
response_fixed = [tags_re.sub('',val) for val in response]

实际上,您的值将是一个整数,当您调用 re.sub 时会导致问题,所以我在假设响应实际上是一个字符串列表的情况下进行操作

于 2013-05-20T20:22:03.973 回答
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]

这将用一个新列表替换响应,其中每个元素都是经过任何操作后的旧元素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

您的第二个问题是索引,因为您[n]在变量名的末尾使用,所以您试图调用列表n中的第 th 项response

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