[英]What is the major difference between list of tuples and a dictionary?
例如:
a = (1,2,3)
b= (5,6,7)
c=zip(a,b)
[(1,5),(2,6),(3,7)]
字典將具有{1:5, 2:6, 3:7}
對列表不是基本的數據結構。 您可以根據需要選擇使用它,但這就像制作列表列表或字典列表一樣。 列表是一種用於存儲線性數據的數據結構:可以在數字行上寫出並標記每個數據0、1、2、3,...的數據。
字典是為O(1)查找時間構建的哈希表 。 字典也稱為“映射”數據結構,因為它實現了映射(如函數),特別a
轉到1
, b
轉到2
,因此字典具有隱含的方向(在這種情況下,abc-> 123,而不是123-> abc)。 哈希表沒有索引的概念。
比較:
myDictionary = {'a':1, 'b':2, 'c':3}
myDictionary['a']
input:a,b,or c output:1,2,or 3
e.g. "what does 'a' map to?"
'a'
|
\
\---> [speedy hash table]
below
|
| math extracts data
|
____________________
/ \
{ a:1 }
{ b:2 c:3 }
\____________________/
from nebulous magic cloud
|
\
\-----> 1
現在列出:
myList = ['a', 'b', 'c']
in memory: ['a', 'b', 'c']
0 1 2 <-- indices
>>> myList[1]
'b'
(旁注:我們上面實際顯示的是一個數組,該數組在內存中是連續的...列表實際上在內存中可能不是連續的(通常不是),但是它經常會像它那樣“起作用”,例如O(1)時間通過元素索引查找元素(這與字典索引不同,在我們的示例中為'a','b','c';列表索引始終為0,1, 2,3,4,... nomatter您正在存儲什么數據。要詳細說明,我們可以立即查找列表中的第三項,倒數第二項或中間項。
配對列表只是普通的配對列表...
[('a',1), ('b',2), ('c',3)]
in memory: [ pair0 , pair1 , pair2 ]
0 1 2
elsewhere in memory:
pair0 --> ('a',1)
elsewhere in memory:
pair1 --> ('b',2)
pair2 --> ('c',3)
在列表中查找內容所花費的時間與列表中的項目數量成正比。 這就像在大海撈針中找到一根針。 您必須檢查每條干草才能找到針葉。 我們將列表用於線性有序數據,例如溫度圖,其中列表中的每個元素都是時間單位,或者以某種順序保存電子郵件。
要回答這個問題,您可能會想問:“如果我在確定兩者之間是否有困難時,什么時候使用成對列表或字典?”作為非常模糊的規則,您將要使用成對列表什么時候
{'a':1, 'a':2, 'b':3, 'c':4} #this would make no sense to put in a dictionary
myDict = {}
myDict['a'] = 1
myDict['a'] = 2 #overwrites previous mapping!
myDict['b'] = 3
myDict['c'] = 4
>>> myDict
{'a':2, 'b':3, 'c':4}
有時候,您需要的數據結構不是列表或字典,例如樹。 有時,您可能要同時使用列表和字典。
c仍然是一個元組列表,每個元組都有自己的一對索引。 您通過下標訪問它們,並且元素彼此之間不依賴。
c[0][0] is 1
c[0][1] is 5
c[2][1] is 7
在字典中,第一個元素是第二個元素的索引。
d[1] is 5
d[2] is 6
d[3] is 7
字典的值不為1、2或3。
這樣可以為您解決問題嗎?
字典是一種數據結構,它基本上基於哈希表 ,這意味着當您查找任何特定鍵時,該鍵將經過數學處理,以便在內存中存儲該值的存儲位置。 然后,我們可以使用內存中的此位置直接轉到存儲值的位置。 如果我們想基於一個鍵在字典中查找一個值,例如您的示例中為3
,則我們可以直接轉到內存中的7
位置,因為3
哈希到內存中的某個位置。
元組列表是類似數組的數據結構。 這意味着,如果要查找鍵(引用元組中的第一個條目),則必須遍歷列表中的每個值,直到找到匹配的元組。 在這種情況下,我們必須檢查(1,5)
, (2,6)
和(3,7)
! 這花費了很多時間,因此字典的優點之一是查找值根本不需要花費很多時間!
具體而言,對於字典,基於鍵的搜索值平均為O(1)
,而列表的搜索值為O(n)
。 兩種算法在進行訪問,插入和刪除所需的時間上也有所不同,但是這些算法的許多細節取決於列表是如何在后台實現的(即,它是單鏈接列表,還是雙重列表)鏈表,調整大小的數組或跳過列表)。 請查看此頁面,以獲取有關跨數據結構進行的各種操作的速度差異的更多詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.