Gab*_*ele 0 python performance
我曾经使用迭代器迭代字典的键.keys():
for _ in dictionary.keys():
Run Code Online (Sandbox Code Playgroud)
但是,我看到使用以下方式:
for _ in [*dictionary]:
Run Code Online (Sandbox Code Playgroud)
然后,在研究这项技术时,我看到另一种方法被建议作为标准:
for _ in dictionary:
Run Code Online (Sandbox Code Playgroud)
这些方法中哪一种最快?
我尝试了以下方法(测量详情见下文):
def simplest(d):
for _ in d:
pass
def extract(d):
for _ in [*d]:
pass
def keys(d):
for _ in d.keys():
pass
def items(d):
for _ in d.items():
pass
Run Code Online (Sandbox Code Playgroud)
结果如图所示。
直接访问(使用.__iter__()方法)是最快的解决方案,也可以说是最具可读性的解决方案。
import time
def measure(method, dict_size):
dictionary = {f'{i}': i for i in range(dict_size)}
ts = time.time()
result = method(dictionary)
te = time.time()
return {'name': method.__name__, 'size': dict_size, 'time': (te - ts) / 1000}
import itertools
time_results = []
for _ in range(5):
time_results.extend([measure(method, size) for method, size in itertools.product([simplest, extract, keys, items], np.logspace(1, 7, base=10, num=7).astype(int))])
Run Code Online (Sandbox Code Playgroud)