这个问题已经在这里有一个答案:
- 为什么多`for`列表理解的顺序事情是这样的? 1个回答
>>> my_list = [[[[1, 2, 3], [4, 5, 6], ]]]
>>> [a for d in my_list for c in d for b in c for a in b]
[1, 2, 3, 4, 5, 6]
相当于
>>> my_list = [[[[1, 2, 3], [4, 5, 6], ]]]
>>> new_list = []
>>> for d in my_list:
... for c in d:
... for b in c:
... for a in b:
... new_list.append(a)
... print(new_list):
[1, 2, 3, 4, 5, 6]
从左到右看时,这句法似乎倒退。 根据PEP 202 “的形式[... for x... for y...]
巢,与上次不同的指数最快的,就像嵌套的循环。” 是“正确的”。
似乎这顺序(从左向右对应于外到内嵌套的for循环)被选,因为这是在其中嵌套for循环被写入的顺序。
然而,由于列表解析(表达部分a
在上面的例子),对应于在嵌套循环的最内部分表达( new_list.append(a)
在上面的例子),它好像我在for _ in _
最接近这个表达式应该是在这两种情况下是相同的,也就是说,它应该是for a in b
和向外:
>>> my_list = [[[[1, 2, 3], [4, 5, 6], ]]]
>>> [a for a in b for b in c for c in d for d in my_list]
NameError: name 'b' is not defined
使最快变化的循环是最接近行动,所以来讲话。 这还适合于在逻辑上更逐步地从左到右读取。
这是用户之间的共同情感? 或者有没有人有一个很好的反驳,为什么目前的语法实现真正是“正确的”?