簡體   English   中英

Python 3.x 列表推導 VS 元組生成器

[英]Python 3.x list comprehension VS tuple generator

是否有任何我想使用的內存、速度或其他原因:

tuple(i for i in range(5000))

代替:

[i for i in range(5000)]

如果我不介意元組的不變性

基本上,列表理解比生成器表達式更快,原因是 它的迭代在 C 中執行 (閱讀@Veedrac 的評論了解原因)。 但是應該在元組中使用生成器表達式的唯一原因是您想對您的項目執行一些操作和/或過濾它們,更重要的是您想要一個元組(因為不變性及其對可變對象的好處)。

畢竟,您可以隨時對代碼進行timeit

In [10]: %timeit tuple(i for i in range(5000))
1000 loops, best of 3: 325 µs per loop

In [11]: %timeit [i for i in range(5000)]
1000 loops, best of 3: 199 µs per loop

另請注意,正如我所提到的,如果您想使用推導式,您必須對您的項目執行操作,否則您可以直接在迭代器上調用該函數,這會更快:

In [12]: %timeit list(range(5000))
10000 loops, best of 3: 98.3 µs per loop

生成器表達式(或簡稱genexps )最好在循環中使用,以在處理大量數據時節省內存。 將 genexp 擴展為可交互的數據類型(例如列表、元組、集合)並不是一種好的做法。

還要記住,Python 3 中的 range() 類似於 Python 2 中的 xrange()。它返回一個生成器。 事實上,即使是 5000,xrange() 也往往更快。 注意:xrange() 在 Python 3 中不存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM