[英]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。所以不确定在这里出了什么问题。
您可以使用zip
函数来实现:
>>> seq = ['1', '2']
>>> print(zip(['str']*len(seq), seq))
[('str', '1'), ('str', '2')]
尽管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)
“要解包的值太多”就是这个意思。 让我们看一下test
中的元素:
test = ('str1',['1', '2'])
for a,b in test:
print(a,b)
test
每个元素都将分解为两个变量。 第一个元素是'str1'
,第二个元素是['1', '2']
。 'str1'
是一个包含四个字符的字符串,因此,解压缩后,它将需要四个变量。 但是,您只提供两个a
和b
。 那是错误。
为了获得所需的输出,我建议按以下步骤打开包装:
a,b = test
现在a
是'str1'
, b
是['1', '2']
。 然后,您可以遍历b
的值:
for item in b:
print(a, item)
结果:
str1 1
str1 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'
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.