英文:ordered dict surprises
(譯者:豌豆花下貓
從python 3.6 開始,常規的字典會記住其插入的順序:就是說,當遍歷字典時,你獲得字典中元素的順序跟它們插入時的順序相同。
在 3.6 之前,字典是無序的:遍歷順序是隨機的。
關於有序字典,這裡有兩件令人意外的事情。
1、你無法獲得第乙個元素
由於字典中的元素具有特定的順序,因此獲取第乙個(或第 n 個)元素應該很容易,對吧?
不對!沒辦法直接做到。
你可能會認為 d[0] 就是第乙個元素,但並不是,它只是鍵為 0 的值,有可能是新增到字典的最後乙個元素。
獲得第 n 個元素的唯一方法是遍歷字典,直到取得第 n 個元素。不能根據有序索引來作隨機訪問。
這是一處列表勝過字典的地方。獲取列表的第 n 個元素是 o(1) 操作。獲取字典的第 n 個元素(即使已排序)是 o(n) 操作。
2、ordereddict 有點不同
由於現在的字典是有序的,collections.ordereddict 就沒用了,對吧?
(譯註:3.6 版本前的 dict 是無序的,但標準庫里提供了乙個有序字典 ordereddict。現在 dict 變有序了,那 ordereddict 似乎是多餘了?)
好像是。但是它不會被刪除,因為那樣會破壞正在使用它的**,並且它還擁有一些常規字典沒有的方法。
另外,它們在行為上也有細微的差別。在比較是否相等時,常規字典不會考慮順序,但 ordereddict 會:
>>> d1 =(譯文完)>>> d2 =
>>> d1 == d2
true
>>> list(d1)
['a', 'b']
>>> list(d2)
['b', 'a']
>>> from collections import ordereddict
>>> od1 = ordereddict([("a", 1), ("b", 2)])
>>> od2 = ordereddict([("b", 2), ("a", 1)])
>>> od1 == od2
false
>>> list(od1)
['a', 'b']
>>> list(od2)
['b', 'a']
>>>
合併兩個有序陣列python
給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為乙個有序陣列。說明 示例 輸入 nums1 1,2,3,0,0,0 m 3 nums2 2,5,6 n 3 輸出 1,2,2,3,5,6 coding utf 8 author xinxin...
python 合併兩個有序陣列
給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為乙個有序陣列。說明 示例 輸入 nums1 1,2,3,0,0,0 m 3 nums2 2,5,6 n 3輸出 1,2,2,3,5,6 思路1.簡單粗暴,先合併再排序。嗯。這樣寫有點耍牛氓。...
pta兩個有序鍊錶的合併 21 合併兩個有序鍊錶
分別遍歷兩個鍊錶,把數放到列表中,運用sort方法。再用尾插法,遍歷列表,建立新的有序鍊錶。class solution def mergetwolists self,l1 listnode,l2 listnode listnode sum def list2num node while node ...