2011-01-26 39 views
3

如果我有一個包含1000萬個對象的列表,我該如何快速過濾列表。通過列表理解需要大約4-5秒的時間完成一次迭代。在python中是否有任何有效的數據結構或庫?或者python不適合大數據集?在python中過濾/迭代非常大的列表

+3

爲什麼它是一個列表?你有其他選擇。某種類型的映射可能比平面列表要聰明得多。你真正**的問題是什麼? – 2011-01-26 02:18:52

+0

還是你的過濾功能慢? – 2011-01-26 02:24:45

回答

2

Itertools專爲高效循環而設計。特別是,您可能會發現ifilter適合您的目的。迭代大數據結構總是很昂貴,但是如果您只需要一些數據,那麼懶惰評估就可以提供很多幫助。

你也可以嘗試使用生成器表達式,這些表達式通常與其列表理解對應物(儘管用法可能不同)或生成器相同,這也具有懶惰評估的好處。

3

如果你有統一的數字類型&如果速度是你的主要目標(你想使用python),請使用Numpy數組。

+0

我們如何知道他的對象是數字? – 2011-01-26 02:24:43

0

即使在一個非常簡單的整型數組上使用內建函數也需要幾秒鐘才能在我的計算機上進行評估。

>>> l=[1]*10000000 
>>> s=filter(lambda x:True,l) 

我建議你使用一種不同的方法,如使用Numpy或懶惰的評價與generators和/或使用迭代模塊itertools