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