小编典典

Python:用于查找表的列表与字典

all

我有大约 1000 万个值需要放入某种类型的查找表中,所以我想知道 listdict 哪个更有效?

我知道你可以为两者做这样的事情:

if something in dict_of_stuff:
    pass

if something in list_of_stuff:
    pass

我的想法是 dict 会更快,更有效。

谢谢你的帮助。

编辑 1
关于我正在尝试做的事情的更多信息。 欧拉问题
92
。我正在制作一个查找表,以查看计算的值是否已全部计算完毕。

编辑 2
查找效率。

编辑 3
没有与价值相关的价值......所以 一套 会更好吗?


阅读 76

收藏
2022-07-07

共1个答案

小编典典

速度

列表中的查找是 O(n),字典中的查找是摊销 O(1),关于数据结构中的项目数。如果您不需要关联值,请使用集合。

记忆

字典和集合都使用散列,它们使用的内存比仅用于对象存储要多得多。根据 Beautiful Code 中的 AM Kuchling
的说法,该实现试图保持哈希 2/3 满,因此您可能会浪费相当多的内存。

如果您不即时添加新条目(您根据更新的问题添加了新条目),则可能值得对列表进行排序并使用二进制搜索。这是 O(log
n),对于字符串来说可能会更慢,对于没有自然排序的对象来说是不可能的。

2022-07-07