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'
是一个有四个字符的字符串,因此,解压缩后,它需要四个变量。但是,您只提供了两个,a
和 b
。那是错误。
为了得到你想要的输出,我建议解包如下:
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')]
我有一个包含字符串的元组和一个字符串列表,如下所示:
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'
是一个有四个字符的字符串,因此,解压缩后,它需要四个变量。但是,您只提供了两个,a
和 b
。那是错误。
为了得到你想要的输出,我建议解包如下:
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')]