次の 2 つのコード スニペット (A & B) は両方とも、2 つの辞書の積集合を返します。
次の 2 つのコード スニペットは両方とも O(n) で実行され、同じ結果が出力されます。ただし、pythonic であるコード スニペット B は、より高速に実行されるようです。 これらのコード スニペットは Python Cookbook からのものです。
コード スニペット A:
def simpleway():
result = []
for k in to500.keys():
if evens.has_key(k):
result.append(k)
return result
コード スニペット B:
def pythonicsimpleway():
return [k for k in to500 if k in evens]
いくつかのセットアップロジックと、両方の機能の時間を計るために使用される機能 =>
to500 = {}
for i in range(500): to500[i] = 1
evens = {}
for i in range(0,1000,2): evens[i] = 1
def timeo(fun, n=1000):
def void(): pass
start = time.clock()
for i in range(n): void()
stend = time.clock()
overhead = stend - start
start = time.clock()
for i in range(n): fun()
stend = time.clock()
thetime = stend - start
return fun.__name__, thetime - overhead
2.3 Ghz Ivy Bridge クアッド コア プロセッサ (OS X 10.8.4) を使用する Python 2.7.5 を使用
私は得る
>>> timeo(simpleway)
('simpleway', 0.08928500000000028)
>>> timeo(pythonicsimpleway)
('pythonicsimpleway', 0.04579400000000078)