如果我非常,非常少次地实例化/更新一些列表,在大多数情况下只有一次,但我检查该列表中存在一个对象多次,是否值得将列表转换为字典然后按键存在检查?
或者换句话说,将列表转换为字典以实现更快的对象存在检查对我来说是否值得?
答案 0 :(得分:4)
字典查找比列表搜索更快。此外,set
也是一种选择。那说:
如果“一堆次”意味着“它会增加50%的性能”,那就去吧。如果它没有,但使代码更好阅读,那么去吧。如果你乐在其中并且没有任何伤害,那就去吧。否则,它很可能不值得。
答案 1 :(得分:1)
你应该使用set
,因为根据你的描述,我猜你没有值得关联。有关详细信息,请参阅Python: List vs Dict for look up table。
答案 2 :(得分:1)
通常,调整每行代码以获得最佳性能并不重要。
根据经验,如果您需要查看多次,创建set
通常是值得的。
然而,考虑到pypy可能比CPython快100倍的线性搜索,那么“几”次可能是“几十”。换句话说,有时复杂性的不变部分很重要。
在那里使用set
可能是最安全的。在系统扩展时,你不太可能发现瓶颈而不是相反。
如果你真的需要微调一切,请记住实现,cpu缓存等......可能会影响它,所以你可能需要为不同的平台进行不同的remicrotune,如果你需要性能很差,那么Python就是可能是一个糟糕的选择 - 虽然也许你可以把热点拉到C. :)。
答案 3 :(得分:0)
字典中的随机访问(查找)速度更快但创建哈希表会消耗更多内存。 更多性能=更多内存使用
取决于列表中的项目数。