注册 登录
Python基础教程

第一章: 环境搭建,安装Python

第二章: 挑选一款趁手的IDE

第三章: 计算机基础知识

第四章: 命令行基础知识

第五章: 从全局把握Python

第六章: Python语言基础

第七章: Python流程控制

第八章: Python数据类型与运算

第九章: Python字符串类型

第十章: Python列表类型

第十一章: Python元祖类型

第十二章: Python字典类型

第十三章: Python集合类型

第十四章: Python函数处理

第十五章: Python文件处理

第十六章: Python面向对象

第十七章: Python异常处理

第十八章: Python模块处理

第十九章: Python项目实战

首页 > Python基础教程 > 第十三章: Python集合类型 > 13.3节:集合的快速查找

13.3节:集合的快速查找

薯条老师 2020-05-21 08:10:03 207165 0

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师的线下Python,Java小班周末班已经开课了,培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Java后端开发。授课详情请点击:http://chipscoco.com/?cate=6

13.3.1 键的输出顺序

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

image.png

对哈希表结构不是很熟悉的同学,可以复习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 高薪就业班

(1) Python后端工程师高薪就业班,月薪10K-15K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,免费领取课程大纲
(3) Java后端开发工程师高薪就业班,月薪10K-20K, 免费领取课程大纲
(4) Python大数据工程师就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取学习资料:


欢迎 发表评论:

请登录

忘记密码我要注册

注册账号

已有账号?请登录