在Python 中,展平可迭代的淺列表可能是將嵌套結構轉換為單級列表的常見任務。有多種方法可以實現此目的,但效能和程式碼可讀性程度各不相同。
最初的嘗試可能涉及嵌套列表理解,如下所示:
[image for image in menuitem for menuitem in list_of_menuitems]
但是,這將遇到 NameError,因為「menuitem」未在外部理解的範圍內定義。
另一個選擇是使用reduce函數:
reduce(list.__add__, map(lambda x: list(x), list_of_menuitems))
雖然此方法會展平列表,但使用list(x) 呼叫將QuerySet 物件轉換為列表可能會妨礙其可讀性。
一種高效而優雅的解決方案由 itertools 模組提供,特別是 itertools.chain。它允許在資料結構的扁平化版本上進行迭代,而無需創建新列表:
from itertools import chain list(chain(*list_of_menuitems))
這種方法避免了將項目複製到新列表中,從而減少了開銷。避免使用解包運算子 * 的稍微更明確的版本是:
chain = itertools.chain.from_iterable([[1, 2], [3], [5, 89], [], [6]]) print(list(chain)) # [1, 2, 3, 5, 89, 6]
這些技術對於展平淺列表同時平衡效能和可讀性非常有價值。
以上是如何在 Python 中有效地展平淺列表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!