python中可哈希的数据类型,python中哈希表用法
关于hash结构的讨论,我们在数组中用过,简单来说就是通过下标定位某类数据的方法。然后,我们学过的一些python知识点也会展示一些hash结构。这篇文章是关于字典和集合的。具体的hash结构将在这两个方面分别介绍。下面我们一起来看看内容。
1、字典
PyDictKeysObject定义了字典哈希表的一些字段.有两个数组,dk _ indexes []和dk_entries[],是存储数据的实数组。Kv数据存储在dk_entries[]数组中,DK _ indexes []用于存储dk_enties数组中存储的kv数据的索引。其中每个kv数据存储在如下条目的数据结构中:
typedefstruct{
/*Cachedhashcodeofme_key。*/
Py _哈希_ tme _哈希;
PyObject * me _ key
PyObject * me _ value/* Thisfieldisonlymeaningfulforcombinedtables */
} PyDictKeyEntryme_hash缓存存储键的哈希值,防止哈希值的重复计算。Me_key和me_value是键和值的真实数据。
2、集合
像字典一样,底层也是哈希结构,与字典相比,可以理解为只有键,而没有值。
与字典相比,收藏要简单得多。存储数据的数组直接保存在PySetObject中。
根据对集合底层数据结构的分析,它还使用了“开发寻址法”来解决哈希冲突。
集合的一些常见操作:
#初始化
S1={1 , 2 , 3}#不推荐。当元素中有字典时,将会报告一个错误。
s2=集合([1 , 4 , 5])
print(s1)#{3 , 1 , 2}
print(s2)#{3 , 1 , 2}
#交叉路口
print(s1s2)#{1}
#工会
print(s1s2)#{3 , 5 , 4 , 2 , 1}
#差异集
打印(s1-s2)#{3 , 2}
#判断子集和超集
S2.issubset(s1)#s2是s1的子集吗?
S1 . issuperset(S2)# S1 S2的超集?
#集合的一些内置方法
#set.add(obj)添加一个集合元素
删除一个集合元素
#set.update(set)合并集合
#set.pop()随机删除一个元素并返回。以上是Python中hash结构的两种解释。对于字典和集合的学习,可以结合hash结构的内容进行深入探索。学完之后,就可以练习代码部分了。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。