以下代码产生预期的输出:
# using a list comprehension as the first expression to a list comprehension
>>> l = [[i*2+x for x in j] for i,j in zip([0,1],[range(4),range(4)])]
>>> l[0]
[0, 1, 2, 3]
>>> l[1]
[2, 3, 4, 5]
但是,当我改用生成器表达式时,会得到不同的结果:
# using a generator expression as the first expression
>>> l = [(i*2+x for x in j) for i,j in zip([0,1],[range(4),range(4)])]
>>> list(l[0])
[2, 3, 4, 5]
>>> list(l[1])
[2, 3, 4, 5]
>>> list(l[0])
[]
>>> list(l[1])
[]
>>> l
[<generator object <listcomp>.<genexpr> at 0x7fddfa413ca8>, <generator object <listcomp>.<genexpr> at 0x7fddfa413c50>]
我知道生成器表达式只能使用一次,但是我无法推理为什么在这种情况下我会两次获得相同的列表,特别是因为生成器对象似乎是唯一的。
我在这里想念什么?这是在 Python 3.6.5 上测试的。