1

如果我非常非常少地实例化/更新几个列表,在大多数情况下只有一次,但是我多次检查该列表中是否存在一个对象,是否值得将列表转换为字典然后检查通过密钥存在?

或者换句话说,我是否值得将列表转换为字典以实现更快的对象存在检查?

4

4 回答 4

4

字典查找比列表搜索更快。也是set一种选择。那说:

如果“一堆时间”意味着“这将是 50% 的性能提升”,那就去吧。如果没有,但可以使代码更好地阅读,那就去吧。如果你会玩得开心并且没有害处,那就去做吧。否则很可能不值得。

于 2013-07-05T07:20:46.940 回答
1

您应该使用 a set,因为根据您的描述,我猜您不会有关联的价值。有关更多信息,请参阅Python:List vs Dict 查找表

于 2013-07-05T07:18:51.603 回答
1

通常,调整每一行代码以获得最佳性能并不重要。

根据经验,如果您需要多次查找,创建一个set通常是值得的。

但是考虑到 pypy 的线性搜索速度可能比 CPython 快 100 倍,那么“几次”可能是“几十次”。换句话说,有时复杂性中不变的部分很重要。

继续使用set那里可能是最安全的。与其他方式相比,随着系统扩展,您不太可能发现瓶颈。

如果您真的需要微调所有内容,请记住实现、cpu 缓存等...可能会影响它,因此您可能需要针对不同的平台进行不同的微调,如果您需要非常糟糕的性能,Python 可能很糟糕选择 - 虽然也许你可以将热点拉到 C 中。:)

于 2013-07-05T07:43:14.177 回答
0

字典中的随机访问(查找)更快,但创建哈希表会消耗更多内存。更高的性能 = 更多的内存使用

这取决于您的列表中有多少项目。

于 2013-07-05T07:35:14.323 回答