"""Given two dicts, find the set of keys that are in both dicts
"""
import time
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
to500 = {}
for i in range(500): to500[i] = 1
evens = {}
for i in range(0, 1000, 2): evens[i] = 1
def simpleway( ):
result = []
for k in to500.keys( ):
if evens.has_key(k):
result.append(k)
return result
def pyth22way( ):
return [k for k in to500 if k in evens]
def filterway( ):
return filter(evens.has_key, to500.keys( ))
def badsloway( ):
result = []
for k in to500.keys( ):
if k in evens.keys( ):
result.append(k)
return result
for f in simpleway, pyth22way, filterway, badsloway:
print "%s: %.2f"%timeo(f)
########################################
the output is:
>>>
simpleway: 0.27
pyth22way: 0.14
filterway: 0.06
badsloway: 12.43
>>>
本文通过实验对比了四种不同的方法来找出两个Python字典之间的共有键:简单方式、Python 2.2风格列表推导式、使用filter函数及一种效率较低的方法,并提供了每种方法的时间开销。
4294

被折叠的 条评论
为什么被折叠?



