在for循环中赋值

-3 投票
6 回答
555 浏览
提问于 2025-04-18 07:12

这可能是个傻问题……但我就是不知道怎么做……

我想做的事情是这样的,你可以看看我尝试过的:

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]

撰写回答