>>> 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
,這樣最快變化的循環是最接近行動,所以來講話。這也適合以更邏輯的逐步方式從左至右閱讀。
這是用戶間的共同情感嗎?或者是否有人對於爲什麼當前的語法實現真的是「正確的一個」有很好的反駁?
這是BDFL宣言。除非Guido在這裏發帖,否則所有的答案都是猜測和觀點,我擔心。 –
我在想象一個替代的宇宙,它以另一種方式完成,而另一個用戶 - 例如稱爲「hemaj」 - 來到SO併發佈一個問題,問「爲什麼Python的列表理解循環從對於循環次序?「 – DSM
我預計這個問題將被關閉,但」與預先存在的'for循環次序「是Guido需要的所有答案。這可能需要一個*殺手*很好的理由才能反對這麼多。 –