我有一个包含字符串的元组和一个字符串列表,如下所示:
test = ('str1',['1', '2'])
for a,b in test:
print(a,b)
我想以一种方式解压缩 [('str1','1'),('str1','2')] 。
但是我得到“ ValueError:解压缩的值太多(预期2)”。
如果我打印测试长度,则为2.所以不确定这里有什么问题。
答案 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'
是一个包含四个字符的字符串,因此,解包后,它需要四个变量。但是,您只提供两个,a
和b
。那是错误。
要获得所需的输出,我建议按如下方式解压缩:
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'
。