我有以下代码:
list1 = [(1, 2), (3, 4, 5), (6, 7, 8, 9), (10, 11)]
for tup_obj in list1:
if len(tup_obj) == 2:
for a, b in tup_obj:
print(a)
print(b)
elif len(tup_obj) == 3:
for a, b, c in tup_obj:
print(a)
print(b)
print(c)
elif len(tup_obj) == 4:
for a, b, c, d in tup_obj:
print(a)
print(b)
print(c)
print(d)
我需要打开列表中的元组
list1 = [(1, 2), (3, 4, 5), (6, 7, 8, 9), (10, 11)]
它由具有不同元素数的元组组成。
我试图获取列表中的每一项(即,除了元组之外什么都没有),一旦选择了它,我想检查该元组中有多少元素(例如,在第一种情况下,元组中的元素数是2)。
这是我用内置的 len
功能。所以如果它是2,我将把它的值作为 a, b
如果所选的元组包含3或4个元素,这意味着我将把变量作为 a, b, c
或 a, b, c, d
. 但一旦这个步骤完成,它就说明它无法解包不可iterable int对象。但我不知道为什么。
3条答案
按热度按时间6psbrbz91#
正如评论中指出的,您应该:
但整个复杂的结构似乎没有必要。为什么不只是:
这将动态地覆盖所有案例。
jm81lzqq2#
根据您的代码,您似乎希望将元组值分配给a、b…等,而不是迭代元组。
当你说
for a, b in tup_obj
这将使用元组,比如(1,2)。这将是第一项1
然后试着把它分解成两个变量a
及b
但是你不能把一个int分解成两个变量。因此,您可能只想将元组中的每个值赋给它自己的变量
然而,正如您所看到的,这并不能很好地扩展,因为您必须为每一个元组长度编写代码并重复自己的操作,所以您可能需要重新考虑您的方法
btqmn9zl3#