我正在尝试这个:
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)))
您强制按错误的顺序进行评估。您正在构建一个生成器的生成器,从 outer 生成器构建一个元组以构建一个生成器元组,然后从内部生成器构建元组。
当您开始使用内部生成器时,外部生成器已完成迭代,因此
y
已经是 2
,即上次迭代的值。这是在迭代内部生成器的整个过程中使用的 y
值。
您需要在生成内部生成器时调用
tuple
,以迭代它们并在 (x, y)
更改之前评估 y
:
tuple(tuple((x, y) for x in range(5)) for y in range(3))