>>> 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]
okunan Bu sözdizimi geriye görünüyorPython'un liste anlama döngüleri sırası neden geriye doğru?
>>> 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]
eşdeğerdir soldan sağa. PEP 202'a göre, "[... for x... for y...]
yuvaları, son dizgiyle en hızlı şekilde değişiyor, tıpkı döngüler için yuvalanmış gibi." "Doğru Olan".
Öyle görünüyor ki bu düzen (sol sağa dış to-iç döngüler için iç içe karşılık gelen) bu döngüler yazılır için hangi iç içe düzenden dolayı seçildi.
Ancak, liste anlama (yukarıdaki örnekte a
) ekspresyonu yapan kısmı, (yukarıdaki örnekte new_list.append(a)
) iç içe döngüler en iç kısmında ifadeye karşılık gelir, bana görünüyor üzerinde dışa for a in b
olmalı ve yani bu ifadenin en yakın for _ in _
, her iki durumda da aynı olmalıdır:
>>> 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
yüzden en hızlı değişen döngü böylece-to-konuşmak, eyleme yakın olduğunu. Bu aynı zamanda soldan sağa daha mantıklı adımlarla okunduğuna da kendini gösterir.
bu kullanıcılar arasında yaygın bir duygu var mı? veya şu anki sözdizimi uygulamasının gerçekte neden "Doğru Bir" olduğu konusunda iyi bir karşı argümanı var mı?
Bu bir BDFL bildirisidir. Guido burada yazmazsa, tüm cevaplar spekülasyon ve fikirdir, korkarım. –
Başka bir şekilde yapıldığı alternatif bir evren hayal ediyorum ve "hemaj" denen başka bir kullanıcı SO 'ya geliyor ve soruyu soran bir soru gönderiyor "Neden Python'un listesi anlama döngü sırası geriye doğru Döngü siparişi için? .. – DSM
Bu sorunun kapanacağını bekliyorum, fakat “döngü emri için önceden var olan” ile tutarlılık Guido'nun ihtiyaç duyacağı her şey. Sadece bu kadarına karşı gitmek için * katil * iyi bir sebep olurdu. –