正如标题所述,处理 Python 字典的成本有多高?创建、插入、更新、删除,全部。
渐近时间复杂度本身很有趣,而且它们与元组或普通列表的比较方式也很有趣。
原文由 Deniz Dogan 发布,翻译遵循 CC BY-SA 4.0 许可协议
正如标题所述,处理 Python 字典的成本有多高?创建、插入、更新、删除,全部。
渐近时间复杂度本身很有趣,而且它们与元组或普通列表的比较方式也很有趣。
原文由 Deniz Dogan 发布,翻译遵循 CC BY-SA 4.0 许可协议
字典是 Python 中最重要的调整部分之一,因为它们是语言的基础。例如,类的成员和栈帧中的变量都在内部存储在字典中。如果它们是正确的数据结构,它们将是一个不错的选择。
根据性能在列表和字典之间进行选择似乎很奇怪:它们做不同的事情。也许你可以告诉我们更多关于你试图解决的问题。
原文由 Ned Batchelder 发布,翻译遵循 CC BY-SA 2.5 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
dicts
(就像set
s 当你不需要将一个值关联到每个键而只是记录一个键是否存在时)是非常优化的。 Creating adict
from N keys or key/value pairs isO(N)
, fetching isO(1)
, putting isO(1)
, and so forth .对于任何非微型容器,真的不能做任何更好的事情!对于微型容器,您可以使用基于
timeit
的基准轻松检查边界。例如:这表明检查空列表或元组中的成员资格比检查空集或字典中的成员资格快 20-30 纳秒;当每一纳秒都很重要时,此信息可能与您相关。向上移动一点……:
您会看到,对于 7 项容器(不包括感兴趣的容器),性能平衡已经发生变化,现在指令和集合具有数百纳秒的优势。当感兴趣的项目存在时:
听写和集合的增益不大,但元组和列表有,尽管听写和集合仍然快得多。
等等,等等 --
timeit
使得运行微基准测试变得非常容易(严格来说,只有在纳秒确实很重要的极少数情况下才能保证,但是,很容易做到,它是检查其他情况没有太大困难;-)。