非常に大きな整列した整数リストを処理する最適な方法を探したい。 大きなリストから計算された値をpythonでフィルタリングして複数の小さなリストを作成する
biglist = [45, 34, 2, 78, 7, 9, 10, 33, 78, 51, 99, 24, 88, ... N] where N > 1m
は、各BIGLIST要素を読み取ることにより固定長S(〜= 200)の複数の小さなリストを作成する要素に異なる動作を適用し、満たしている場合、条件付き基準要素又は各小リストに値を追加します例えばSに達するまで。
x_smallist = []
y_smallist = []
z_smallist = []
count = 0
for i in biglist:
b = i/5
a = b * 2
c = a^3 + b
if b > 7 and b < 69:
x_smallist.append(i)
y_smallist.append(a)
z_smallist.append(b)
count += 1
if count > S:
break
例と機能は説明のためだけのものです。ビッグリストが大きく、Sに達するまで各要素が読み込まれ、処理が何千回も繰り返されるので、私はforループを避けたい。リストの理解度(またはマップやフィルタ)でこれをどのように達成できますか?
あなたが各要素にこれだけの処理を行っている場合は、A)あなたはリスト内包でそれを表現することはできませんと、b)、リストの内包表記の時間節約が本物で矮小化されますとにかくやる必要がある仕事。 –
これは 'for'ループとして最もよく行われます。 list comprehensionsと 'filter'は' a'、 'b'、' count'のような中間変数を必要としないときのものです。より速くするための私の唯一の可能な提案は、 'smallist.append((i、a、b))'にタプルを追加する単一のリストを持つことです。 – agf
は、リストを前もってフィルタリングするのは簡単ではないようです。 –