Python學習之 雜湊表與可雜湊物件

2022-07-02 21:03:17 字數 1977 閱讀 8626

十一、python 雜湊表與可雜湊物件

11.1 雜湊表(雜湊表)

雜湊是從 hash 音譯過來的,雜湊表(hashtable),也叫做雜湊表。

雜湊表是鍵值對的無序集合,其每個鍵都是唯一的,核心演算法是通過索引去查詢值,python 中的字典符合雜湊表結構,字典中每個鍵對應乙個值,my_dict=。

雜湊是使用演算法將任意大小的資料對映到固定長度輸出的過程,該輸出就是雜湊值。

雜湊演算法可以建立高效能的資料結構,該結構可以快速儲存和訪問大量資料,雜湊值通過雜湊函式計算。

雜湊函式,本質上是鍵到值的對映關係;

雜湊表本質上就是乙個陣列,儲存的是經過雜湊函式運算之後得到的值;

雜湊值是唯一標識資料的固定長度的數值。

這些都屬於概念層面的知識,初期了解即可,後面隨著應用會逐步掌握。

11.2 可雜湊與不可雜湊

這部分在 官方文件 說的比較繞,簡單說一下的結論(也是大家共識的),乙個物件(python 中萬物皆物件)在生命週期內,保持不變,就是可雜湊的(hashable)。

還有乙個更簡單的證明辦法,在 python 中能插入 set 集合的元素是可雜湊的,例如下述**:

my_set = set()

test = [1, 3.14, 'hello', (2, 3), , [1, 2], ]

my_set.add(test[0])

my_set.add(test[1])

my_set.add(test[2])

my_set.add(test[3])

# my_set.add(test[4])

# my_set.add(test[5])

# my_set.add(test[6])

測試之後得到的結論是:

可以被雜湊的資料結構:int、float、str、tuple;

不可以被雜湊的資料結構:dict、list、set。

加上之前滾雪球學到的知識,可以了解到,可以被雜湊的資料型別都是不可變的,而不可以被雜湊的資料型別是可變的,有點繞,稍微停頓一下,多讀兩遍即可。

可雜湊的物件通常用作字典的鍵和集合的成員,因為這些資料結構在內部使用雜湊值。

最終結論: 可雜湊 ≈ 不可變。

11.3 python hash() 函式

hash 函式用於獲取乙個物件的雜湊值,語法結果為 hash(object),返回值是物件的雜湊值, 雜湊值是整數。

使用方式非常簡單:

print(hash('test'))

print(hash(1))大連**醫院

# 注意下面使用不可雜湊物件會出現錯誤

# hash([1,2,3])

11.4 hashlib 模組

hashlib 提供了常見的摘要演算法,具體如下:

md5()、sha1()、sha224()、sha256()、sha384()、sha512()、blake2b()、blake2s()、sha3_224()、sha3_256()、sha3_384()、 sha3_512()、 shake_128()、shake_256()

使用 dir(hashlib) 即可獲取上述所有可用方法。

md5 是最常見的摘要演算法,生成結果是固定的 16 位元組,通常用乙個 32 位的 16 進製字串表示,示例**如下:

import hashlib

# md5演算法

md5 = hashlib.md5()

data = "hello world"

md5.update(data.encode('utf-8'))

# 計算 hash 值,拿到加密字串

print(md5.hexdigest())

sha1 演算法更安全,它的結果是 20 位元組長度,通常用乙個 40 位的 16 進製字串表示。而比 sha1 更安全的演算法是 sha256 和 sha512 等,不過越安全的演算法越慢,並且摘要長度更長。

11.5 總結

本篇部落格為大家說明了 python 的雜湊表概念和可雜湊物件,對於初學階段是有幫助的。

python建立雜湊表 python實現雜湊表

複製 如下 usr bin env python coding utf 8 實現雜湊表 線性位址再雜湊 def changekey key,m,di key01 key di m return key01 a raw input please entry the numbers n split m ...

雜湊表與雜湊演算法學習筆記

雜湊表 於陣列具有下標隨機訪問特性,理解這點非常重要。可以說雜湊表是由陣列進化來的。將輸入的鍵通過雜湊函式對映得出的value作為index去table中查詢,這便是雜湊的思想。graph lr a 鍵值key 雜湊函式 b 結果value 我們了解到為什麼雜湊表的查詢複雜度是o 1 因為key v...

資料結構與演算法之雜湊表

介紹 雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。應用 看乙個實際需求,google公司的乙個上機題 有乙個公司,...