这可能是一个愚蠢的问题......但我无法做到这一点......
我想做这样的事情,在这里你可以看到我的尝试:
value, value1 = [i,i+1 for i in range(5)] ---> failed
(value, value1) = [(i,i+1) for i in range(5)] ---> failed
value, value1 = [[i,i+1] for i in range(5)] ---> failed
这只是尝试在循环中分配2个值,非常基本。
我不知道是否可以这样做,我想是的。
请注意,我对i的值或示例中显示的数字等不感兴趣。我只是想找到一种方法来分配2个值。
修改
如果这有帮助,我试图获得的输出将是:(我正在使用python 2.7)
value, value1 = [i,i+1 for i in range(5)]
然后输出
value = [0,1,2,3,4]
value1 = [1,2,3,4,5]
答案 0 :(得分:1)
您需要创建两个列表来执行您要执行的操作。
In [4]: value, value1 = [i for i in range(5)],[j for j in range(5)]
In [5]: value
Out[5]: [0, 1, 2, 3, 4]
In [6]: value1
Out[6]: [0, 1, 2, 3, 4]
答案 1 :(得分:0)
如果要循环覆盖值,可以使用zip
函数,如下所示:
for i,j in zip(range(5), range(1,6)):
print(i,j)
这对于大范围有效,因为没有需要分配的列表。
如果你真的想要两个列表,那么最好(我的意思是最清楚的)方法就是两个循环:
val1, val2 = [i for i in range(5)], [i for i in range(1,6)]
无论你做什么,大型名单都会效率低下。
答案 2 :(得分:0)
您可以使用以下几种方式将第一个元组作为两个值:
使用列表订阅:
value, value1 = [(i,i+1) for i in range(5)][0]
这是迄今为止最易读和最简单的方法。
使用解构赋值:
(value, value1), _, _, _, _ = [(i,i+1) for i in range(5)]
或使用python3你可以:
(value, value1), *_ = [(i,i+1) for i in range(5)]
_
是一个可变占位符,在解包时会丢弃该值。 *
的工作方式与参数的工作方式相同,这意味着代表完整的值列表,虽然这是python3中引入的新颖性,这就是为什么在python2中你需要放置尽可能多的_
是列表中的值。
解构赋值是一些语法糖,可以执行以下操作:
>>> [[a,b],c,d],e,f = [[[1,2],3,4],5,6]
>>> print a,b,c,d,e,f
1 2 3 4 5 6
答案 3 :(得分:0)
在一行中分配多个变量的语法是:
variable_1, variable_2 = value_1, value_2
在您的示例中,您只为第一个变量提供值。
答案 4 :(得分:0)
您应该查看错误消息,而不仅仅是“失败”,这对包括您自己在内的任何人都没用。
ValueError: too many values to unpack (expected 2)
所以它预计2,正如我所期望的那样,因为你试图为两个变量赋值,但你应该问自己为什么有太多的值。
一种简单的方法是简单地打印出您要分配的内容,然后输入一个打印语句显示
[[0, 1], [1, 2], [2, 3], [3, 4], [4, 5]]
如果您对i
的值不感兴趣,并且只对“如何分配两个值”感兴趣,则需要澄清您想要的两个值。
例如你也可以说
value, value1 = [[i,i+1] for i in range(5)][-1]
如果您只想存储最后一个,因为您显然对列表不感兴趣。你不妨只说
value, value1 = 1,2
如果你想说服自己可以在一个语句中分配多个变量。
答案 5 :(得分:0)
你在想错了。您试图一次分配太多变量,而不是您不能这样做。它只是你正在形成是不正确的。
你可能想过这样的事情
value, value1 = [i,i+1 for i in range(5)] ---> failed
假设它没有失败你会想到; 这将给我以下值:
value, value1 = [0,1,2,3,4]
and value = [0,1,2,3,4]
如果您读错了,那就是一个值错误;解压“预期2”不同的值太多了。
x1,y1 = x2,y2
是正确的格式,其中 x1 = x2和y1 = y2。