过滤列表后迭代报错TypeError:'int'对象不可迭代的问题排查
解决TypeError: 'int' object is not iterable的小坑
哈哈,这个问题看起来有点反直觉,但其实是个很容易踩的语法小坑!我来给你把逻辑理清楚:
你说的没错,arr确实是列表类型,而且里面只有一个整数元素822,但问题根本不在arr的类型上,而是出在你写的for循环写法上!
错误原因拆解
当你写:
for index, item in arr: # do something
Python会默认把arr里的每一个元素当成一个可迭代对象,尝试把它拆分成两个值(也就是你写的index和item)。但你的arr里的元素是整数822,整数是不可迭代的,没法被拆成两个变量,这就直接触发了TypeError: 'int' object is not iterable。
举个对比的例子:如果你的arr是[(0, 822)],那这样写循环是没问题的,因为每个元素是元组(可迭代),可以被拆成两个值。但你的arr是[822],循环时每次拿到的是单个整数,自然没法解包成两个变量。
正确的写法
如果你的需求是同时获取元素的索引和元素值,你需要用Python内置的enumerate()函数,它会把列表的每个元素转换成(索引, 元素值)的元组,这样就能正常解包了:
for index, item in enumerate(arr): # do something
再补个小验证:你单独执行index, item = 822试试,肯定会报同样的错——这就是你的循环在幕后做的事情,现在是不是一下子就明白啦?
内容的提问来源于stack exchange,提问作者Ramon Balthazar
相关产品推荐
相关产品推荐

