【发布时间】:2013-08-10 03:01:57
【问题描述】:
例如:
>>> [x for x in range(y) for y in range(z) for z in range(3)]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'y' is not defined
我希望这与以下行为相同:
>>> a=[]
>>> for z in range(3):
... for y in range(z):
... for x in range(3):
... a.append(x)
...
>>> a
[0, 1, 2, 0, 1, 2, 0, 1, 2]
但事实并非如此。为什么?
【问题讨论】:
-
documentation for comprehensions 解释了这一点。也许它可以写得更好,但是“......考虑到每个 for 或 if 子句,从左到右嵌套”似乎很清楚地表明你会得到与你期望的完全相反的嵌套顺序。