python—为什么在尝试解包元组时会出现“typeerror:无法解包非iterable int对象”?

0yycz8jy  于 2021-09-29  发布在  Java
关注(0)|答案(3)|浏览(320)

我有以下代码:

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, ca, b, c, d . 但一旦这个步骤完成,它就说明它无法解包不可iterable int对象。但我不知道为什么。

6psbrbz9

6psbrbz91#

正如评论中指出的,您应该:

for tup_obj in list1:
    if len(tup_obj) == 2:
        a, b = tup_obj
        print(a)
        print(b)

# ...

但整个复杂的结构似乎没有必要。为什么不只是:

for tup_obj in list1:
    for a in tup_obj:
        print(a)

这将动态地覆盖所有案例。

jm81lzqq

jm81lzqq2#

根据您的代码,您似乎希望将元组值分配给a、b…等,而不是迭代元组。
当你说 for a, b in tup_obj 这将使用元组,比如(1,2)。这将是第一项 1 然后试着把它分解成两个变量 ab 但是你不能把一个int分解成两个变量。
因此,您可能只想将元组中的每个值赋给它自己的变量

list1 = [(1, 2), (3, 4, 5), (6, 7, 8, 9), (10, 11)]

for tup_obj in list1:
    if len(tup_obj) == 2:
        a, b = tup_obj
        print(a)
        print(b)
    elif len(tup_obj) == 3:
        a, b, c = tup_obj
        print(a)
        print(b)
        print(c)
    elif len(tup_obj) == 4:
        a, b, c, d = tup_obj
        print(a)
        print(b)
        print(c)
        print(d)

然而,正如您所看到的,这并不能很好地扩展,因为您必须为每一个元组长度编写代码并重复自己的操作,所以您可能需要重新考虑您的方法

btqmn9zl

btqmn9zl3#

list1 = [(1, 2), (3, 4, 5), (6, 7, 8, 9), (10, 11)]

for tup_obj in list1:
    if len(tup_obj) == 2:
        a,b = tup_obj
        print(a,b)
    elif len(tup_obj) == 3:
        a,b,c = tup_obj
        print(a,b,c)
    elif len(tup_obj) == 4:
        a,b,c,d = tup_obj
        print(a,b,c,d)

相关问题