在for循环中分配值

时间:2014-05-21 15:03:17

标签: python loops for-loop assign

这可能是一个愚蠢的问题......但我无法做到这一点......

我想做这样的事情,在这里你可以看到我的尝试:

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]

6 个答案:

答案 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。