2014-05-12 65 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