当我运行此代码时:
arr = list(filter(lambda x: x > 0, arr))
for index, item in arr:
# do something
我收到此错误
TypeError:' int'对象不可迭代
哪个没有意义,因为我有list
而不是int
。
测试arr
会产生:
>>> print(arr)
[822]
>>> print(type(arr))
<class 'list'>
>>> print(len(arr))
1
虽然这个类型错误有很多问题,但这里没有解释这个案例。 什么可能是错的?
答案 0 :(得分:6)
问题不是filter
不可迭代,而是你在for循环的头部进行 iterable unpacking 的事实:
for index, item in arr:
# do something
由于arr
的元素是整数,因此您无法将它们解压缩为两个值(您将index, item
写为赋值的“目标”,但Python应如何解决index, item = 1
?)。您可以使用enumerate(..)
来跟踪索引:
for index, item in enumerate(arr):
# do something
enumerate(..)
将迭代作为输入,并生成一个可迭代的元组,其中每个元组包含索引(作为第一项),元素作为第二项。因此enumerate([1, 'a', 25])
将生成(0, 1), (1, 'a'), (2, 25)
。
如果您不需要索引,则可以在没有item
的情况下迭代index
:
for item in arr:
# do something
答案 1 :(得分:0)
如果您难以理解enumerate
,可以使用以下简单的解决方法:
arr = list(filter(lambda x: x > 0, arr))
for index in range(len(arr)):
item = arr[index]
# do something with item and index
我没有对它进行测试,但它可能比枚举更有效,因为它可以避免开销。