过滤后无法迭代列表

Ram*_*zar 4 python python-3.x

当我运行此代码时:

arr = list(filter(lambda x: x > 0, arr))
for index, item in arr:
  # do something
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

TypeError:'int'对象不可迭代

哪个没有意义,因为我list没有int.测试arr产量:

>>> print(arr)
[822]
>>> print(type(arr))
<class 'list'>
>>> print(len(arr))
1
Run Code Online (Sandbox Code Playgroud)

虽然有很多关于这种类型错误的问题,但这里没有一个解释.什么可能是错的?

Wil*_*sem 6

问题不是filter不可迭代,而是你在for循环的头部进行迭代解包这一事实:

for index, item in arr:
  # do something
Run Code Online (Sandbox Code Playgroud)

由于元素arr是整数,你不能用两个值解压缩它们(你写作index, item赋值的"目标",但Python应该如何解决index, item = 1?).您可以enumerate(..)用来跟踪索引:

for index, item in enumerate(arr):
  # do something
Run Code Online (Sandbox Code Playgroud)

enumerate(..)将迭代作为输入,并生成一个可迭代的元组,其中每个元组包含索引(作为第一项),元素作为第二项.所以enumerate([1, 'a', 25])会产生(0, 1), (1, 'a'), (2, 25).


如果你不需要索引,你可以迭代items而不需要index:

for item in arr:
  # do something
Run Code Online (Sandbox Code Playgroud)

  • @Razär:没有.Al列表是可迭代的.但是,如果您想要可迭代的解包,则列表的*elements*应该是可迭代的.如果您在Python中迭代列表,则***遍历*元素*.不是索引.如果你想要索引,你可以使用`enumerate(..)`. (3认同)