在for循环中赋值
这可能是个傻问题……但我就是不知道怎么做……
我想做的事情是这样的,你可以看看我尝试过的:
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
这只是一个在循环中给两个值赋值的尝试,非常基础。
我不知道这样是否可行,我想应该可以。
注意,我对i的值或者示例中显示的数字完全不感兴趣。我只是想找到一种方法来给两个值赋值。
补充:
如果这有帮助,我想要的输出是这样的:(我使用的是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
与其说“它失败了”,这对任何人,包括你自己,都没有帮助,不如看看错误信息。
ValueError: too many values to unpack (expected 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
如果你想让自己相信在一个语句中给多个变量赋值是可能的。
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)]
无论你怎么做,大列表的处理效率都会很低。
0
在一行中给多个变量赋值的写法是:
variable_1, variable_2 = value_1, value_2
在你的例子里,你只给第一个变量提供了一个值。
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。
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]