次の簡単な例では、乱数のリストをソートする 2 つの関数があります。最初のメソッドはジェネレータ式を渡しsorted
、2 番目のメソッドは最初にリストを作成します。
import random
l = [int(1000*random.random()) for i in xrange(10*6)]
def sort_with_generator():
return sorted(a for a in l)
def sort_with_list():
return sorted([a for a in l])
ライン プロファイラーでのベンチマークは、2 番目のオプション ( sort_with_list
) がジェネレーター式の約 2 倍の速度であることを示しています。
何が起こっているのか、なぜ最初の方法が2番目の方法よりもずっと遅いのか、誰でも説明できますか?