目录

13.3.1 键的输出顺序

13.3.2 键的数据类型

13.3.3 集合的快速查找

13.3.4 知识要点

13.3.5 系统学习python


13.3.1 键的输出顺序

集合类型的底层实现基于哈希表,键的输出顺序取决于键在哈希表中的存储顺序。

python win32com word 查找所有图表_python

对哈希表结构不是很熟悉的同学,可以复习12.4.4节中的内容。

代码实例:

# __desc__ = 测试集合的键的输出顺序
 
stars = {"陈法蓉", "陈德蓉", "陈宝莲"}
 
for star in stars:
  print(_)
 
"""
输出为:
"陈德蓉"
"陈法蓉"
"陈宝莲"
"""

从程序的输出可以分析出,集合中的键的输出顺序不一定是定义或插入时的排列顺序。同学们可以对比下字典的键的输出顺序,在Python 3.6以后,字典中的键按其插入的顺序进行输出:

代码实例:

# __desc__ = 测试字典的键的输出顺序
 
stars = {"陈法蓉": 0, "陈德蓉": 0, "陈宝莲": 0}
 
for star in stars:
  print(_)
 
"""
输出为:
"陈法蓉"
"陈德蓉"
"陈宝莲"
"""

从程序的输出可以分析出,字典中的键的输出顺序与键的排列顺序一致。

13.3.2 键的数据类型

集合的键的数据类型同字典中的键的数据类型,必须是静态的、可哈希的数据类型。

迄今为止学过的静态的数据类型有:简单数据类型,字符串,元组。

为什么键必须是静态的数据类型?

Python中的集合类型也是基于哈希表结构,如果键名是静态的,不可变的,那么就能保证通过哈希函数计算时,得到的都是相同的哈希值。如果键名是可变的数据类型,意味着在这个数据类型的生命周期内,它的值是变化的,就不能保证计算得到的是相同的哈希值,所以键名必须是静态的数据类型,以保证其哈希值的唯一性。

13.3.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.3.4 知识要点

(1) 集合类型的底层实现基于哈希表,键的输出顺序,取决于键在哈希表中的存储顺序

(2) 集合中的键的数据类型必须是静态的数据类型,迄今为止学过的静态的数据类型有:简单数据类型,字符串,元组。

(3) 集合类型与字典类型一样,是基于哈希表实现的数据结构。