Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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_Python 2.7 - Fatal编程技术网

Python 如何从列表中解包四个变量?

Python 如何从列表中解包四个变量?,python,python-2.7,Python,Python 2.7,我有以下清单: varlist = ['1', 'King', 't', '1'] 我试图在for循环中解压这四个变量 for var1, var2, var3, var4 in varlist: post += len(var1)-len(var3) post *= len(var2)/len(var4) 当我运行此循环时,我得到以下结果: ValueError: need more than 1 value to unpack 我怎样才能解决这个问题?你实际上不能这样做

我有以下清单:

varlist = ['1', 'King', 't', '1']
我试图在
for
循环中解压这四个变量

for var1, var2, var3, var4 in varlist:
    post += len(var1)-len(var3)
    post *= len(var2)/len(var4)
当我运行此循环时,我得到以下结果:

ValueError: need more than 1 value to unpack

我怎样才能解决这个问题?

你实际上不能这样做。有一种快速的方法可以让它按照你认为的方式工作,但最终你试图做的是行不通的。下面是快速破解:

varlist = ['1', 'King', 't', '1']
for var1, var2, var3, var4 in [varlist]: # note the brackets
    post += len(var1)-len(var3)
    post *= len(var2)\len(var4) # note that this line fails, because \ isn't /
不能这样做的原因是,
for
循环遍历iterable中的每个元素,并将该值赋给您告诉它的任何内容。在这种情况下,
varlist
中的第一个元素是
'1'
,而不是
('1','King','t','1')
。通过在[varlist]中执行
for,您可以将当前的
varlist
包装到另一个列表中,并对其进行迭代。第一个元素是
['1','King','t','1']
,它可以解压成
var1,var2,var3,var4

然而,如果这真的是你想要做的,我强烈建议你重新思考你的设计。如果您有很多
varlist
s,这听起来很棒,否则只需执行以下操作:

var1, var2, var3, var4 = varlist # unpack without the loop
post += len(var1) - len(var3)
post *= len(var2) / len(var4)

解包不同于迭代。您需要这样做:

var1, var2, var3, var4 = varlist
post += len(var1)-len(var3)
post *= len(var2)/len(var4)

这里不需要循环。

我不认为您不需要解包,您需要一种方法来对列表进行分组,并访问分组中的各个元素,这可以通过以下方式完成:

*4是您想要的元素数量,如果您有一个类似
varlist=[1,2,3,4,5,6,7,8,9,10]

它将在4步中压缩四个元素,给出输出:

1 2 3 4
5 6 7 8

列表中的元素必须是分配给它们的变量的倍数,否则无法获得上面输出中所示的所有元素。

zip(*[iter(iterable)]*N)
如果你知道它的功能,那就太棒了,但是@anon已经发布了一个itertools grouper的答案,你的答案没有任何评论。OP使用了反斜杠表示除法,他们根本不可能理解
zip
iter
、或
[]*N
,更不用说
*
或将它们全部放在一起了!我认为这太复杂了,不容易打开包装。如果不需要循环,则无需执行
iter
、乘法列表或
zip
。@AdamSmith,它不回答问题吗?我的回答几乎与anon.PadraicCunningham在同一时间发布的,这篇帖子适用于:@Adam Smith我接到一个手机电话,我正准备冲出答案。我从不只留下代码答案,但我理解你的观点。@Blckknght-这不是减去字符串,而是减去它们的长度。“`是个打字错误。
varlist = ['1', 'King', 't', '1']

for i,j,k,l in zip(*[iter(varlist)]*4):
    print i,j,k,l
1 King t 1
1 2 3 4
5 6 7 8