以下代码产生了预期的输出:
然而,当我使用生成器表达式时,得到了不同的结果:
# 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上测试了这个问题,你能告诉我我错在哪里吗?