为了回答最初提问者的性能担忧(对于dict
vs中的查找set
),有点令人惊讶的是,假设例如一半查找失败而一半成功,dict
查找可以更快(在我相当慢的笔记本电脑上的 Python 2.5.1 中)。以下是如何找出答案:
$ python -mtimeit -s'k=dict.fromkeys(range(99))' '5 in k and 112 in k'
1000000 loops, best of 3: 0.236 usec per loop
$ python -mtimeit -s'k=set(range(99))' '5 in k and 112 in k'
1000000 loops, best of 3: 0.265 usec per loop
多次检查以验证它们是可重复的。因此,如果慢速笔记本电脑上的 30 纳秒或更少时间处于绝对关键的瓶颈,那么可能值得采用晦涩难懂的dict.fromkeys
解决方案,而不是简单、明显、可读且清晰正确set
(不寻常——在 Python 中几乎总是简单直接解决方案也具有性能优势)。
当然,需要检查自己的 Python 版本、机器、数据以及成功与失败测试的比率,并通过极其准确的分析确认,将查找时间缩短 30 纳秒(或其他时间)将产生重要影响。
幸运的是,在绝大多数情况下,这将被证明是完全没有必要的……但由于程序员无论如何都会沉迷于毫无意义的微优化,无论他们被告知多少次无关紧要,该模块就在标准中图书馆让那些几乎毫无意义的微基准测试变得容易!-)timeit