最近、Pythonを使用して数百万サイズのリストを処理しています。
ここにリストEがあります。これには1,470,000個の要素があり、各要素は2つの整数を持つリストです。
Eは次のようになります:[[1、3]、[2、4]、[4、7] ...]
最初の列と2番目の列の最大数をそれぞれ取得したいと思います。
リスト内包表記を使用して取得できます
m1 = max([e[0] for e in E])
m2 = max([e[1] for e in E])
return (m1, m2)
もう1つの方法は、zipを使用することです。
list(map(max, zip(*E)))
リスト内包表記は大きなリストを作成するので(さらに2回)、最初の考えでは2番目の方法の方が速いはずだと思います。しかし、リスト内包表記は非常に高速であり、zipを使用する方法は(cProfileを使用して)約10〜20倍遅くなります。
zipはそれほど遅くすべきではないと思います(さらに、リスト内包表記をそれほど速くするにはどうすればよいでしょうか?)誰かが理由を教えてもらえますか?
私はPython3.2を使用しています
PS Windowsタスクマネージャーを使用すると、Pythonが新しいリストを作成したことを示すメモリトレースも表示されません。黒魔術があるに違いない。