注册 登录
Python基础教程

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

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

第三章: 计算机基础知识

第四章: 命令行基础知识

第五章: 从全局把握Python

第六章: Python语言基础

第七章: Python流程控制

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

第九章: Python字符串类型

第十章: Python列表类型

第十一章: Python元祖类型

第十二章: Python字典类型

第十三章: Python集合类型

第十四章: Python函数处理

第十五章: Python文件处理

第十六章: Python面向对象

第十七章: Python异常处理

第十八章: Python模块处理

第十九章: Python项目实战

首页 > Python基础教程 > 第十三章: Python集合类型 > 13.1节:集合的基础概念

13.1节:集合的基础概念

薯条老师 2020-05-17 10:34:35 205300 0

编辑 收藏

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

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

13.1.1 理解集合类型

集合类型与字典类型非常接近,Python中的集合类型也是用{}符号括住的一个数据集合,集合中的元素以英文逗号进行分隔。

image.png

集合与字典一样,底层实现基于哈希表:

# 定义一个集合变量stars
stars = {"陈法蓉", "陈德蓉"}
在上文代码中定义了一个集合类型变量stars, 在stars中包含两个元素,集合中的元素相当于字典中的键名,也就是说,Python中的集合类型是键名的数据集合。既然Python中的集合是键名的数据集合,那么集合中的元素必须是静态的、可哈希的数据类型,我们可以在交互模式中进行验证:
>>> stars ={"陈法蓉", "陈德容", ["李嘉欣"]}
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

由输出可知,在定义集合类型的变量时,由于元素中包含可变的数据类型(列表),Python解释器抛出了类型错误的异常信息。

13.1.2 集合的类型名

在交互模式中通过type来输出集合的类型名:
>>> stars = {"陈法蓉", "陈德蓉"}
>>> type(stars)
<class 'set'>

从输出可知,字典的类型名为set。
集合中的键名同样是唯一的,对列表进行显式类型转换以后,可以自动去掉重复的元素:
# __desc__ = 使用集合类型进行显式转换,对列表中的元素进行去重
 
# 在列表中可以包含重复的元素
stars = ["陈法蓉", "陈德蓉", "陈法蓉", "陈德蓉"]
 
stars = set(stars)
# stars的输出为{'陈德容', '陈法蓉'}

13.1.3 集合的定义

对字典进行定义,主要有对象定义法和直接定义法。
(1) 对象定义法
字典的类型名是dict,可以直接在交互模式中执行help(dict)来查找dict的定义及用法:
class set(object)
|  set() -> new empty set object
|  set(iterable) -> new set object
|
|  Build an unordered collection of unique elements.

从交互模式的输出中,可看到如下两个定义集合的构造方法:
(1) set()
(2) set(iterable)

1.set()
使用set()构造一个空的集合。
代码实例:
# __desc__ = 通过set()构造一个空的集合
 
# 定义一个空的集合
stars = set()
 
# 空值在条件判断中会自动转换为布尔类型False
if stars:
  print("there are stars in stars")
else:
  print("there is no star in stars")
2. set(iterable)
这里的iterable表示的是可迭代对象,可迭代对象中的元素必须是不可变的数据类型,否则会抛出类型错误的异常信息。迄今为止学过的可迭代对象:字符串,列表,元组,字典,集合
代码实例:
# __desc__ = 通过可迭代对象来构造集合
 
# 1.通过字符串类型来构造集合
alphabet = set("abcdefg")
# alphabet的输出为{'e', 'c', 'b', 'a', 'g', 'd', 'f'}
 
# 2.通过列表类型来构造集合
alphabet = set(['e', 'c', 'b', 'a', 'g', 'd', 'f'])
# alphabet的输出为{'e', 'c', 'b', 'a', 'g', 'd', 'f'}
 
# 3.通过元组类型来构造集合
alphabet = set(('e', 'c', 'b', 'a', 'g', 'd', 'f'))
# alphabet的输出为{'e', 'c', 'b', 'a', 'g', 'd', 'f'}
 
# 4.通过字典类型来构造集合
alphabet = set({'e': 1, 'c': 1, 'b': 1, 'a': 1, 'g': 1, 'd': 1, 'f': 1})
 
# 使用字典类型进行构造时,以字典中的键名作为集合的键名
# alphabet的输出为{'e', 'c', 'b', 'a', 'g', 'd', 'f'}
 
 
# 5.通过集合类型来构造集合
alphabet = set({'e', 'c', 'b', 'a', 'g', 'd', 'f'})
# alphabet的输出为{'e', 'c', 'b', 'a', 'g', 'd', 'f'}
可迭代对象中的元素必须是不可变的数据类型,否则会抛出类型错误的异常信息:
>>> stars = ["陈法蓉", "陈德容", ["陈法蓉", "陈德容"]]
>>> stars = set(stars)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

简单数据类型,字符串,元组都是不可变的数据类型,列表,字典,集合等是可变的数据类型。
(2) 直接定义法
直接定义法是指直接通过集合的别名符号{}来进行定义。在{}中,键名以英文逗号进行分隔。
代码实例:
# __desc__ = 直接通过{}来构造集合
 
# 不能使用{}来构造一个空的集合,Python解释器会将其解析为字典类型
stars = {}
# stars是一个空的字典
 
# 构造一个有值的集合
stars = {"陈法蓉", "陈德蓉"}

13.1.4 在循环中遍历集合

集合是一种可迭代对象,可以在for循环中遍历集合的键名。
遍历集合的for循环结构:
for name in set:
  pass
代码实例:
# __desc__ = 在for循环中遍历集合的键名
 
# 构造一个有值的集合
stars = {"陈法蓉", "陈德蓉"}
 
for star in stars:
  print(star)

13.1.5 集合的元素输出顺序

Python3.6以前,字典中的键的输出顺序是无序的,在3.6以后,键的输出顺序与元素的插入顺序一致。但集合的键的输出顺序仍是无序的。
代码实例:
# __desc__ = 集合的键的输出顺序是无序的
 
alphabet = set("abcdefg")
# alphabet的输出可能为{'e', 'c', 'b', 'a', 'g', 'd', 'f'}
# 从输出顺序可以看出,与元素本来的排列顺序并不一致
Python中的集合同样是基于哈希表进行实现,键的输出顺序取决于底层的数据结构。

13.1.6 知识要点

(1)Python中的集合类型是用{}符号括住的一个数据集合,集合中的元素以英文逗号进行分隔。
(2)集合中的元素,相当于字典中的键名,元素类型必须是静态的数据类型。
(3)集合的类型名是set,可通过对象定义法和直接定义法来定义字典
(4)集合也是一种可迭代对象,可以在for循环中直接遍历出集合的键名

13.1.7 高薪就业班

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

扫码免费领取学习资料:


欢迎 发表评论:

请登录

忘记密码我要注册

注册账号

已有账号?请登录