如何从列表中解压缩四个变量?

Zac*_*tes 2 python python-2.7

我有这个清单:

varlist = ['1', 'King', 't', '1']
Run Code Online (Sandbox Code Playgroud)

我试图在for循环中解压缩这四个变量;

for var1, var2, var3, var4 in varlist:
    post += len(var1)-len(var3)
    post *= len(var2)/len(var4)
Run Code Online (Sandbox Code Playgroud)

当我运行此循环时,我得到以下内容:

ValueError: need more than 1 value to unpack
Run Code Online (Sandbox Code Playgroud)

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

det*_*tly 8

解包与迭代不同.你需要这样做:

var1, var2, var3, var4 = varlist
post += len(var1)-len(var3)
post *= len(var2)/len(var4)
Run Code Online (Sandbox Code Playgroud)

这里不需要循环.


Ada*_*ith 5

你实际上不能这样做.有一个快速的黑客让它按照你的想法运作,但最终你想要做的事情是行不通的.这是快速黑客:

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 /
Run Code Online (Sandbox Code Playgroud)

你不能这样做的原因是一个for循环迭代迭代中的每个元素,并将该值分配给你告诉它的任何东西.在这种情况下,第一个元素varlist'1',而不是('1','King','t','1').通过for <stuff> in [varlist]将当前包装varlist在另一个列表中,然后迭代它.THAT的第一个元素['1','King','t','1']是无法打包的var1, var2, var3, var4.

我强烈建议重新考虑你的设计,但是,如果这真的是你想要做的.如果你有很多varlists,这听起来很棒,否则只是这样做:

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