response = [0, 1, 2]
for i in response:
response[i] = tags_re.sub('', response[i])
"'TypeError: list indices must be integers, not str'"
如何编辑该列表?
我需要更改列表的所有元素
response = [0, 1, 2]
for i in response:
response[i] = tags_re.sub('', response[i])
"'TypeError: list indices must be integers, not str'"
如何编辑该列表?
我需要更改列表的所有元素
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 时会导致问题,所以我在假设响应实际上是一个字符串列表的情况下进行操作
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)
听起来您的列表实际上是形式["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)
或它们已经是字符串)。
首先,您永远不想在迭代列表时真正编辑它。你会过得很糟糕。(添加和删除条目更是如此,但这只是一个好习惯。)
你想要这样的东西:
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'