Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-太多值无法解压缩_Python_String_Tuples_Unpack - Fatal编程技术网

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”]
。谢谢。在元组上迭代和在列表上迭代的根本区别是什么?没有,您只需要确保您正在迭代可以按指定方式解包的内容。谢谢。在元组上迭代和在列表上迭代的根本区别是什么?没有,您只需要确保您正在迭代可以按指定方式解包的内容。