繁体   English   中英

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。所以不确定在这里出了什么问题。

您可以使用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'是一个包含四个字符的字符串,因此,解压缩后,它将需要四个变量。 但是,您只提供两个ab 那是错误。

为了获得所需的输出,我建议按以下步骤打开包装:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM