python 字典有序無序及查找效率,hash表


剛學python的時候認為字典是無序,通過多次插入,如di = {}, 多次di['testkey']='testvalue' 這樣測試來證明無序的。
后來接觸到了字典查找效率這個東西,查了一下,原來字典在python內部是通過哈希表的順序來排的,做了一些測試,比如di = {1:1,3:3,2:2,4:4,5:5} ,無論怎么改變鍵值對的順序,print di 總是會{1: 1, 2: 2, 3: 3, 4: 4, 5: 5}。所以看起來當插入di['key']='value'時,這組鍵值對有時並沒有跑到最后的位置。
所以亦可以說:字典是有序的。
當然,這里的有序和無序的概念要看你從哪方便理解了,從數據結構上看它是已哈希表的順序排列;只不過從展示層上看它的確不是從左到右按賦值添加的。

另外從python字典中取值,無論長度多少,其時間/空間復雜度都是O(1)。

leetcode 列表兩個值相加等於某個數,返回兩個值對應的index的題目,如果想利用單層循環來實現,正好利用到hash表。

https://leetcode.com/problems/two-sum/

實現代碼:

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        dict={}
        for i,x in enumerate(nums):
            if dict.get(target-x,None) == None:
                dict[nums[i]] = i
            else:
                return(dict[target-x],i)
要比用雙層循環速度快一個量級


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM