嵌套元组遍历报错:TypeError: cannot unpack non-iterable int object
问题原因解析
你定义的tup并非三层嵌套元组,这是核心问题:
Python 中,元组的判定依赖逗号而非括号,多余的括号会被自动忽略。你写的(((1,2),(3,4),(5,6))),由于最外层括号内没有逗号,会被简化为((1,2),(3,4),(5,6))——这是一个包含3个二元组的两层元组,不是你预期的三层结构。
报错循环的具体分析
for sub_tup in tup: for (a,b) in sub_tup: print(a)
- 第一层循环
for sub_tup in tup:sub_tup会依次取到(1,2)、(3,4)、(5,6)这三个二元组。 - 第二层循环
for (a,b) in sub_tup:此时sub_tup是(1,2),循环会逐个取出其中的元素(先取1,再取2)。当尝试用(a,b)去解包整数1时,就会触发TypeError——整数不是可迭代对象,无法拆分成两个变量。
为什么第二个循环能正常运行
for (a,b) in tup: print(a)
这里tup的每个元素都是长度为2的元组((1,2)、(3,4)、(5,6)),刚好可以被(a,b)正确解包,因此能正常打印每个元组的第一个元素。
实现预期的三层嵌套遍历
如果要实现你原本期望的嵌套遍历,需要给最外层元组添加逗号,明确它是包含一个三元组的元组:
tup = (((1,2),(3,4),(5,6)),) # 最外层末尾加逗号 for sub_tup in tup: for (a,b) in sub_tup: print(a)
运行这段代码会输出1、3、5,符合嵌套遍历的预期。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

