自己動手寫個微型 CSDN 吧,還能實現網頁版 Blink,No.1
916
2025-03-31
橡皮擦,一個逗趣的互聯網高級網蟲,新的系列,讓我們一起 Be More Pythonic。
滾雪球學 Python 第二輪
已完成的文章清單
十一、Python 哈希表與可哈希對象
11.1 哈希表(散列表)
11.2 可哈希與不可哈希
11.3 Python hash() 函數
11.4 hashlib 模塊
11.5 這篇博客的總結
已完成的文章清單
滾雪球學 Python 第二輪開啟,進階之路,列表與元組那些事兒
說完列表說字典,說完字典說集合,滾雪球學 Python
關于 Python 中的字符串,我在補充兩點,滾雪球學 Python
列表推導式與字典推導式,滾雪球學 Python
滾雪球學 Python 之 lambda 表達式
滾雪球學 Python 之內置函數:filter、map、reduce、zip、enumerate
Python 中級知識之裝飾器,滾雪球學 Python
滾雪球學 Python 之閉包操作,本系列第 8 篇文章
滾雪球學 Python 之怎么玩轉時間和日期庫
滾雪球學 Python 之作用域下的 global 和 nonlocal 關鍵字
十一、Python 哈希表與可哈希對象
11.1 哈希表(散列表)
哈希是從 Hash 音譯過來的,哈希表(hashtable),也叫做散列表。
哈希表是鍵值對的無序集合,其每個鍵都是唯一的,核心算法是通過索引去查找值,Python 中的字典符合哈希表結構,字典中每個鍵對應一個值,my_dict={"key1":"value1","key2":"value2"}。
哈希是使用算法將任意大小的數據映射到固定長度輸出的過程,該輸出就是哈希值。
哈希算法可以創建高性能的數據結構,該結構可以快速存儲和訪問大量數據,哈希值通過哈希函數計算。
哈希函數,本質上是鍵到值的映射關系;
哈希表本質上就是一個數組,存儲的是經過哈希函數運算之后得到的值;
哈希值是唯一標識數據的固定長度的數值。
這些都屬于概念層面的知識,初期了解即可,后面隨著應用會逐步掌握。
11.2 可哈希與不可哈希
這部分在 官方文檔 說的比較繞,簡單說一下的結論(也是大家共識的),一個對象(Python 中萬物皆對象)在生命周期內,保持不變,就是可哈希的(hashable)。
還有一個更簡單的證明辦法,在 Python 中能插入 set 集合的元素是可哈希的,例如下述代碼:
my_set = set() test = [1, 3.14, 'hello', (2, 3), {'key': 1}, [1, 2], {3,6}] 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])
1
2
3
4
5
6
7
8
9
10
測試之后得到的結論是:
可以被哈希的數據結構:int、float、str、tuple;
不可以被哈希的數據結構:dict、list、set。
加上之前滾雪球學到的知識,可以了解到,可以被哈希的數據類型都是不可變的,而不可以被哈希的數據類型是可變的,有點繞,稍微停頓一下,多讀兩遍即可。
可哈希的對象通常用作字典的鍵和集合的成員,因為這些數據結構在內部使用哈希值。
最終結論: 可哈希 ≈ 不可變。
11.3 Python hash() 函數
hash 函數用于獲取一個對象的哈希值,語法結果為 hash(object),返回值是對象的哈希值, 哈希值是整數。
使用方式非常簡單:
print(hash('test')) print(hash(1)) # 注意下面使用不可哈希對象會出現錯誤 # hash([1,2,3])
1
2
3
4
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())
1
2
3
4
5
6
7
SHA1 算法更安全,它的結果是 20 字節長度,通常用一個 40 位的 16 進制字符串表示。而比 SHA1 更安全的算法是 SHA256 和 SHA512 等,不過越安全的算法越慢,并且摘要長度更長。
11.5 這篇博客的總結
本篇博客為大家說明了 Python 的哈希表概念和可哈希對象,對于初學階段是有幫助的。
深入研究下去,你應該嘗試自己手寫哈希算法與可哈希對象,再學習一段時間吧,希望本文對你有所幫助。
相關閱讀
Python 爬蟲 100 例教程,超棒的爬蟲教程,立即訂閱吧
Python 爬蟲小課,精彩 9 講
今天是持續寫作的第
108
/ 200 天。
如果你想跟博主建立親密關系,可以關注同名公眾號
夢想橡皮擦
,近距離接觸一個逗趣的互聯網高級網蟲。
博主 ID:夢想橡皮擦,希望大家
、
評論
、
。
Python 數據結構
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。