Python - 解压缩的值太多了

时间:2015-08-20 20:47:50

标签: python string tuples unpack

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

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

我想以一种方式解压缩 [('str1','1'),('str1','2')]

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

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

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

虽然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)

答案 2 :(得分:1)

"解包的价值太多"就是这个意思。让我们看一下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

答案 3 :(得分:0)

您的代码会迭代test中的每个项目;先'str1',然后['1', '2']。问题是当你尝试a, b = 'str1'时(这是for循环正在做的事情)。 4中有'str1'个值,但只有两个变量可供您分配。

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

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'