我有以下的代碼:與嵌套列表理解奇怪行爲
[e for e in [sl] for sl in [1,[2,3],4,5]]
我認爲是等效(在輸出方面)到:
[sl for sl in [1,[2,3],4,5]]
然而,儘管後者產生:[1,[2,3],4,5]
前者的回報:[5, 5, 5, 5]
我認爲,必須對嵌套for-statements
進行了評估。
我在這裏發現了一個類似的案例Weird behavior: Lambda inside list comprehension但由於它使用了匿名函數,所以這種行爲背後的原因應該是不同的。
顯然,有些東西我錯過了,我看不到。
謝謝你的任何澄清
UPDATE
帕特里克指出,兩個for
的順序是錯誤的,除非sl
被定義之前不應該運行。我騙自己這裏,因爲我跑的例子在解釋和[sl for sl in [1,[2,3],4,5]]
被執行第一離開sl
組到列表中的最後一個值globals()
現在將是巨大的,明白這是怎麼評價
[e for e in [sl] for sl in [1,[2,3],4,5]]
以產生[5, 5, 5, 5]
輸出。
哦,不,它只是行實際上和我運行實例在翻譯。但是,是的,你確實是對的!我必須在[1,[2,3],4,5]]'之前運行'sl [sl,],因此'sl'保持設置爲'globals()'中列表的最後一個值。這也解釋了爲什麼倒置的「for」工作。然而,在全局變量中把'sl'設置爲'5',你會如何解釋[1,[2,3],4,5]]中'[e for [in sl] for sl的行爲? –
我的意思是,我理解最左邊的'for'local'sl'會正確地覆蓋全局變量。我只是想了解當sl'已經設置時我的解決方案是如何評估的 –
@holak請參閱我的編輯(它很大以適合評論)。如果這仍然沒有幫助,請隨時多問。 –