1

例如:

>>> [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]

但事实并非如此。为什么?

4

3 回答 3

4

按照与传统 for 循环相同的顺序放置循环:

>>> [x for z in range(3) for y in range(z) for x in range(3)]
[0, 1, 2, 0, 1, 2, 0, 1, 2]
于 2013-08-09T18:48:48.797 回答
4

如果您颠倒循环的顺序,您当前的理解将起作用:

[x for z in range(3) for y in range(z) for x in range(3)]
于 2013-08-09T18:50:50.320 回答
3

你可以这样想列表理解:

[x for z in range(3)
       for y in range(z)
         for x in range(3) ]

只需删除冒号,将 for 循环包裹在括号中并x放在前面。

于 2013-08-09T19:01:57.450 回答