データを探索するときのリストと辞書型の速度比較
データを探索するときのリストと辞書を速度比較してみた.
プログラム
以下のプログラムで調べた
#-*- coding:utf-8 -*- import time a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'] b = {'a':1, 'b':1, 'c':1, 'd':1, 'e':1, 'f':1, 'g':1, 'h':1, 'i':1, 'j':1, 'k':1} def test_a(): if 'c' in a: print 'a' def test_b(): if b.has_key('c'): print 'a' if __name__=='__main__': f = time.clock() test_a() t = time.clock() print t-f f = time.clock() test_b() t = time.clock() print t-f
結果
- 1回目
リスト 0.000531219697289
辞書型 0.000296955110286
- 2回目
リスト 0.000330316733787
辞書型 0.000177806454924
- 3回目
リスト 0.00050555690998
辞書型 0.00178136405047
- 4回目
リスト 0.000355979521096
辞書型 0.000163875227528
- 5回目
リスト 0.0023804068285
辞書型 0.00198446668145
- 6回目
リスト 0.000446165887923
辞書型 0.00161125643174
- 7回目
リスト 0.000526453751075
辞書型 0.00165488317016
- 8回目
リスト 0.000484293457639
辞書型 0.00183232301384
感想
リストが線形探索で,辞書型はハッシュだから,計算量的にはO(n)とO(1)ってことなのかな?
だから,当然辞書型のほうが速いと思ってたら,リストは途中から高速化しだした.
なんでだろ??