Python - 太多值无法解包

Python - too many values to unpack

我有一个包含字符串的元组和一个字符串列表,如下所示:

test = ('str1',['1', '2'])
for a,b in test:
    print(a,b)

我想以一种可以得到 [('str1','1'),('str1','2')].

但是我收到“ValueError:要解压的值太多(预期为 2)”。

如果我打印测试长度,它会显示为 2。所以不确定这里有什么问题。

您的代码遍历 test 中的每个项目;首先 'str1',然后 ['1', '2']。问题是当您尝试执行 a, b = 'str1' 时(这就是 for 循环正在执行的操作)。 'str1' 中有 4 个值,但您尝试为其分配的只有两个变量。

这是一种实现您真正想要的方法:

test = ('str1',['1', '2'])

test_str, test_list = test

for b in test_list:
    print(test_str, b)

在此代码中,test_str'str1'test_list['1', '2']。然后你遍历 test_list,只引用 test_str 得到 'str1'.

虽然 test 有两个元素,但您试图遍历元组是行不通的,因为 test 没有元组(它本身就是一个元组)。

所以这有效:

test = [('str1',['1', '2'])]
for a,b in test:
    print(a,b)

或者,要获得你想要的,作为列表:

print([(test[0], item) for item in test[1]])

你也可以这样迭代:

test = ('str1',['1', '2'])
for item in test[1]:
    print(test[0], item)

"Too many values to unpack" 就是这个意思。我们看一下test:

中的元素
test = ('str1',['1', '2'])
for a,b in test:
    print(a,b)

test中的每个元素将被解包为两个变量。第一个元素是'str1',第二个元素是['1', '2']'str1' 是一个有四个字符的字符串,因此,解压缩后,它需要四个变量。但是,您只提供了两个,ab。那是错误。

为了得到你想要的输出,我建议解包如下:

a,b = test

现在 a'str1'b['1', '2']。然后,您可以遍历 b:

中的值
for item in b:
    print(a, item)

结果:

str1 1
str1 2

您可以使用 zip 函数来实现:

>>> seq = ['1', '2']
>>> print(zip(['str']*len(seq), seq))
[('str', '1'), ('str', '2')]