2014-05-12 29 views
-2

假设我有一百个自然数,一百个自然数和一百个自然数的字典(假设键和值都是自然数)的列表。我想访问这些数据类型中的元素。哪种方法可以更高效和更快速地访问它?我知道我可以使用像timeit或cprofile等一些性能工具来检查性能,但我怎么知道选择哪种数据类型以及何时?哪种方法更有效,更快速地访问元素?

+0

使用'timeit'学习并进行性能测试。更短的执行时间意味着更快(如果你不知道,你会发现哪个更好) –

+0

列表与字典的用例应该很明显。使用一个列表。如果您必须快速查找基于某个键的特定项目,请使用字典。 *测试所有假设*。 –

+1

@thefourtheye ???索引一个'list'是O(1)像'dict',但总是*更快,因为不需要计算哈希值。也许你的意思是一个链接列表,它被实现为'collections.deque' ... – Bakuriu

回答

0

在高概述:

  • list查找是O(N)

n是列表的长度。

  • dict查找是O(1)

这是基本的Big O notation或复杂性。

+0

在案例集中会有任何区别,或者它的查找是否与列表相同? – Ameet

+0

这不是一个公平的比较,因为''set''(* sets *)没有像列表或字典那样的查找操作。请参阅:http://stackoverflow.com/questions/7351459/time-complexity-of-python-set-operations和https://wiki.python.org/moin/TimeComplexity –

+0

@JamesMills你的意思是“查找操作“,在这里?在'dict'和'set'中的成员检查是'O(1)',而在'list'中是'O(n)',在'dict'和'list'中键/索引的访问是'O(1) (请参阅https://wiki.python.org/moin/TimeComplexity)。 – jonrsharpe