1
我寫作這樣的事情掙扎:爲什麼不反轉()接受一個發生器?
list(reversed(list(el.iterancestors()))) + [1,2,3]
凡發電機吮吸,因爲我不得不給他們消費進入名單。
有沒有辦法簡化這個?我認爲reversed()
應該接受一個迭代器,我錯了嗎?
我寫作這樣的事情掙扎:爲什麼不反轉()接受一個發生器?
list(reversed(list(el.iterancestors()))) + [1,2,3]
凡發電機吮吸,因爲我不得不給他們消費進入名單。
有沒有辦法簡化這個?我認爲reversed()
應該接受一個迭代器,我錯了嗎?
發電機不保證有最後一項,所以不能顛倒。以下的輸出是什麼?
from itertools import cycle
reversed(cycle('abc'))
還有一不小心吃的都是你的記憶的風險:
from itertools import permutations
reversed(permutations('abcdefghijklmnopqrstuvwxyz', 10)) # 19,275,223,968,000 tuples
注意的reversed()
的一點是一定要內存使用效率。對於序列,所以具有索引(列表,字符串,元組,範圍)的對象reversed()
會生成一個迭代器,該迭代器使用內部索引,該索引在迭代時開始於len(inputobject) - 1
,並前進至0
。它永遠不必以這種方式創建輸入序列的副本,但該技巧只能處理已有長度並支持隨機訪問的內容。
對於你的情況我不使用reversed()
反正。你想要的清單作爲輸出,而不是一臺發電機,所以用切片扭轉列表,而不是:
list(el.iterancestors())[::-1] + [1, 2, 3]
記憶效率是不是一個問題在這裏,因爲你正在建設一個新的列表對象。