はじめに
前回、要素 in リストの参照が辞書、セット型と比べ、実験にて非常に遅いことを確認した。
http://qiita.com/cof/items/05f6ffc6d4e5b062aaa9
しかるに、辞書内包表記は結構速いはずである。
もしや、参照前に毎回辞書内包を作ったら爆速なんじゃないだろうかと思ったので、調べてみた。
実行環境
python2.7
windows7
Intel Core i5 CPU 2.4GHz
メモリ 4.0 GB
実行条件
以下の二つのコードの10000要素参照、10回実行時の時間を計測することで調べてみた。要素数10000
要素 in リスト
要素 in {要素:True for 要素 in リスト}
結果(10回実行時の合計時間)
要素 in リスト 10.226
要素 in {要素:True for 要素 in リスト} 124.887
結論
辞書内包を毎回つくるのが速いわけがなかった。
実験コードたち
def in_list(n):
ls = [i for i in range(n)]
for i in range(n): i in ls
def in_dict(n):
ls = [i for i in range(n)]
for i in range(n): i in {i:True for i in ls}
def exe(func,num=100):
from timeit import timeit
setup = 'from __main__ import ' + func.split('(')[0]
print "%s: %s" % (func, timeit(func, setup, number=num))
if __name__=='__main__':
q = 10**4
exe('in_list(%d)'%q,10)
exe('in_dict(%d)'%q,10)