【发布时间】:2013-04-02 14:29:18
【问题描述】:
看看两个列表推导,每个都包含两个 for 子句。我们看到,如果 for 子句的顺序正确,Python 就会感到困惑。但如果它们是错误的方法,Python 可以处理它。为什么?
Python 3.2.3 (default, Apr 11 2012, 07:15:24) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> [x + y for x in range(y) for y in range(4)]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'y' is not defined
>>> [x + y for y in range(4) for x in range(y)]
[1, 2, 3, 3, 4, 5]
>>>
【问题讨论】:
-
在理解中写
fors,就像你写普通循环一样:外部优先,内部接下来。 -
我可以看到这就是 Python 所需要的。我要问的是为什么会这样。
-
您将其视为“第一个循环,然后是第二个循环”。把它想象成“外循环,然后是内循环”
-
正是出于这个原因,我避免使用嵌套列表组合...
-
@Hammerite 我并不是说没有理由按照您喜欢的顺序进行操作。但也有理由反过来做(一个已经被多次给出:它与等效的
for:循环的顺序匹配)。这是我有问题的“错误”和“正确”。
标签: python list list-comprehension