2011-01-26 12 views
3

1000万のオブジェクトを含むリストがある場合、リストを素早くフィルタリングするにはどうすればいいですか?リストの理解を通じた完全な反復には約4〜5秒かかります。これのための効率的なデータ構造やライブラリはありますか?または、Pythonは大量のデータセットには適していませんか?非常に大きなリストのPythonでのフィルタリング/反復

+3

なぜそれがリストであるを使用して別のアプローチを使用して、あなたをお勧めしたいですか?他にも選択肢があります。いくつかの種類のマッピングは、フラットリストよりもはるかにスマートです。あなたの**本当の**問題は何ですか? –

+0

またはフィルタリング機能が遅いですか? –

答えて

2

Itertoolsは効率的なループ処理を行うように設計されています。特に、あなたの目的に合ったifilterが見つかるかもしれません。大規模なデータ構造を反復することは常にコストがかかりますが、一度にいくつかのデータが必要な場合は、遅延評価が大いに役立ちます。

ジェネレータ式は、通常はリストの理解度と同じですが(使用法は異なるかもしれませんが)、ジェネレータも使用できます(遅延評価の利点もあります)。

3

均一なタイプの数字がある場合は、&スピードが主な目標である場合(そしてPythonを使用する場合)は、Numpy配列を使用します。

+0

彼のオブジェクトが数字であることはどうやってわかるのですか? –

+0

私はしません。私は私の答えを修飾します。 – Gerrat

0

非常にプリミティブな整数配列の組み込み関数を使用しても、コンピュータで評価するのに数秒かかります。

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

は、私は、このようなgeneratorsNumpyまたは遅延評価を使用して、および/または反復モジュールitertools

+0

これは整数配列ではなく、プリミティブではありません。これは、プリミティブ配列ではないO(1)のパフォーマンスを与える、 'append'や' extend'のようなさまざまな最適化された操作を持つサイズ変更可能な、異種のリストです。実際、 'numpy'配列は、Pythonリストよりもプリミティブな整数配列に近いものです。 Python 3では 'filter'はすでに怠惰です。 –

関連する問題