5
以下の1000個の数値のリストを作成する方法を検討してください。リストの追加と連結の複雑さの差
def test1():
l = []
for i in range(1000):
l = l + [i]
return l
def test2():
l = []
for i in range(1000):
l.append(i)
print timeit.repeat(stmt=test1, number=100,repeat=2)
print timeit.repeat(stmt=test2, number=100,repeat=2)
出力:
[0.30474191033602543, 0.3783786557587963]
[0.015134341605235302, 0.023081246200096328]
なぜappendメソッドは、連結よりも約20倍優れています。連結はO(k)の複雑さを有する一方、AFAIK付加はO(1)の複雑さを有する。 Kはここでは1です。
見落としたことはありますか?
はまだそれが '' [0.047872320772834216、0.04017255103519537]を取って
+=
には同一の参照への再割り当てとlist.extend()
と同じものである連結を、増補使用追加の約2倍。 – garg10may@ garg10may:いいえ、そうではありません。私のタイミングを見てください。 –
@ garg10may:O(1)は正確な測定ではなく、パフォーマンスの*クラス*です。異なるO(1)アルゴリズム間の一定の時間は依然として変化し得る。 –