为什么这个嵌套循环生成器似乎不起作用?

问题描述 投票:0回答:1

我正在尝试这个:

tuple(map(tuple, tuple(((x,y) for x in range(5)) for y in range(3))))

我得到了这个:

(((0, 2), (1, 2), (2, 2), (3, 2), (4, 2)),
 ((0, 2), (1, 2), (2, 2), (3, 2), (4, 2)),
 ((0, 2), (1, 2), (2, 2), (3, 2), (4, 2)))

但我期望:

(((0, 0), (1, 0), (2, 0), (3, 0), (4, 0)), 
 ((0, 1), (1, 1), (2, 1), (3, 1), (4, 1)), 
 ((0, 2), (1, 2), (2, 2), (3, 2), (4, 2)))
python generator nested-loops
1个回答
0
投票

您强制按错误的顺序进行评估。您正在构建一个生成器的生成器,从 outer 生成器构建一个元组以构建一个生成器元组,然后从内部生成器构建元组。

当您开始使用内部生成器时,外部生成器已完成迭代,因此

y
已经是
2
,即上次迭代的值。这是在迭代内部生成器的整个过程中使用的
y
值。

您需要在生成内部生成器时调用

tuple
,以迭代它们并在
(x, y)
更改之前评估
y

tuple(tuple((x, y) for x in range(5)) for y in range(3))
© www.soinside.com 2019 - 2024. All rights reserved.