>>> 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 循环),因为这是编写嵌套 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
因此,可以说,变化最快的循环最接近动作。这也有助于以更合乎逻辑的逐步方式从左到右阅读。
这是用户之间的共同情绪吗?还是有人对为什么当前的语法实现确实是“正确的”有很好的反驳?