目录
13.3.1 键的输出顺序
13.4.2 键的数据类型
13.4.3 集合的快速查找
13.4.4 知识要点
13.4.5 系统学习python
13.3.1 键的输出顺序
集合类型的底层实现基于哈希表,键的输出顺序取决于键在哈希表中的存储顺序。
对哈希表结构不是很熟悉的同学,可以复习12.4.4节中的内容。
代码实例:
# __desc__ = 测试集合的键的输出顺序
stars = {"陈法蓉", "陈德蓉", "陈宝莲"}
for star in stars:
print(_)
"""
输出为:
"陈德蓉"
"陈法蓉"
"陈宝莲"
"""
从程序的输出可以分析出,集合中的键的输出顺序不一定是定义或插入时的排列顺序。同学们可以对比下字典的键的输出顺序,在Python 3.6以后,字典中的键按其插入的顺序进行输出:
代码实例:
# __desc__ = 测试字典的键的输出顺序
stars = {"陈法蓉": 0, "陈德蓉": 0, "陈宝莲": 0}
for star in stars:
print(_)
"""
输出为:
"陈法蓉"
"陈德蓉"
"陈宝莲"
"""
从程序的输出可以分析出,字典中的键的输出顺序与键的排列顺序一致。
13.4.2 键的数据类型
集合的键的数据类型同字典中的键的数据类型,必须是静态的、可哈希的数据类型。
迄今为止学过的静态的数据类型有:简单数据类型,字符串,元组。
为什么键必须是静态的数据类型?
Python中的集合类型也是基于哈希表结构,如果键名是静态的,不可变的,那么就能保证通过哈希函数计算时,得到的都是相同的哈希值。如果键名是可变的数据类型,意味着在这个数据类型的生命周期内,它的值是变化的,就不能保证计算得到的是相同的哈希值,所以键名必须是静态的数据类型,以保证其哈希值的唯一性。
13.4.3 集合的快速查找
集合类型基于哈希表结构,所以也能进行快速的查找。但与字典类型不同的是,集合中只有键,没有键值。集合类型适用于这样的应用场景:只用来进行快速查找,而无需关心键所对应的键值。当我们还需要获取键值时,应当使用字典这种数据结构。
代码实例:
# __desc__ = 通过字典和集合来进行快速查找
# 定义一个IP地址黑名单
blacklist = {"120.239.72.105", "120.239.72.108"}
remote_addr = "120.239.72.104"
if remote_addr not in blacklist:
# 如果用户地址不在黑名单中,则允许访问
pass
else:
# 否则定义禁止用户访问的逻辑
pass
# 如果我们需要统计用户访问的次数,那么应当使用字典
statistics = {}
if remote_addr in statistics:
# 该用户每访问一次,就加一
statistics[remotr_addr] +=1
else:
# 用户第一次访问时,设置初值为1
statistics[remotr_addr] =1
13.4.4 知识要点
(1) 集合类型的底层实现基于哈希表,键的输出顺序,取决于键在哈希表中的存储顺序
(2) 集合中的键的数据类型必须是静态的数据类型,迄今为止学过的静态的数据类型有:简单数据类型,字符串,元组。
(3) 集合类型与字典类型一样,是基于哈希表实现的数据结构。
13.4.5 系统学习python
薯条老师简介:资深技术专家,技术作家,著有《Python零基础入门指南》,《Java零基础入门指南》等技术教程。薯条老师的博客:http://www.chipscoco.com, 系统学习后端,爬虫,数据分析,机器学习、量化投资。