Python-太多值无法解压缩
我有一个包含字符串的元组和字符串列表,如下所示:Python-太多值无法解压缩,python,string,tuples,unpack,Python,String,Tuples,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'(
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\u str
是'str1'
,test\u list
是['1','2']
。然后您迭代test_list
,只需引用test_str
即可获得'str1'
您的代码迭代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\u str
是'str1'
,test\u list
是['1','2']
。然后迭代test\u list
,只需引用test\u 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)
尽管
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 = ('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'])
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')]
您可以使用
zip
函数来实现:
>>> seq = ['1', '2']
>>> print(zip(['str']*len(seq), seq))
[('str', '1'), ('str', '2')]
元组的第一个元素是
“str1”
,第二个元素是列表[“1”、“2”]
。元组的第一个元素是“str1”
,第二个元素是列表[“1”、“2”]
。谢谢。在元组上迭代和在列表上迭代的根本区别是什么?没有,您只需要确保您正在迭代可以按指定方式解包的内容。谢谢。在元组上迭代和在列表上迭代的根本区别是什么?没有,您只需要确保您正在迭代可以按指定方式解包的内容。