1. 简介
集合是Python中的内置数据结构
集合可被看做是没有value的字典
集合元素是无序的
集合元素不能重复
集合是可变的
集合允许数学运算
集合是分散存储的
2. 集合的创建
集合名 = {元素, 元素, 元素}
集合就是没有value的字典,创建方法与字典相同
# 创建前与创建后的元素排列顺序是不同的
>>> college1 = {"哲学", "经济学", "法学", "教育学"}
>>> print(college1)
{'教育学', '哲学', '经济学', '法学'}
# 不能使用{}创建空集合
>>> set1 = {}
>>> print(set1, type(set1))
{}
创建空集合不能使用 集合 = {} 形式,因为这是创建空字典,创建空集合要使用函数 set()
函数:set()
用法:集合名 = set(参数)
函数 set()将已有的其它类型数据转换为集合,其中,数据类型可以是:列表、元组、字典、字符串、数字序列等 注意:转换字典为集合时,只会保留字典的key
# 创建一个空集合
>>> set1 = set()
>>> print(set1, type(set1))
set()
# 转换列表为集合
>>> college2 = set(["哲学", "经济学", "金融学", "文学", "历史学"])
>>> print(college2)
{'哲学', '历史学', '金融学', '文学', '经济学'}
# 转换字符串为集合
>>> s2 = set("中华人民共和国")
>>> print(s2)
{'华', '民', '和', '共', '人', '国', '中'}
3. 操作集合元素
3.1 查和改
查:集合是无序的,不支持索引取值
改:集合不支持更新操作,只能 先删除再创建
3.2 增
函数:add()
用法:集合.add(元素)
元素存在则忽略,没有则新增,一次只能添加一个元素
>>> college1 = {"哲学", "经济学", "法学", "教育学"}
>>> college1.add("计算机学")
>>> print(college1)
{'哲学', '法学', '计算机学', '教育学', '经济学'}
函数:update()
用法:集合.update(列表/元组)
参数可以是列表或者元组
# 参数是列表
>>> college1 = {"哲学", "经济学", "法学", "教育学"}
>>> college1.update(["生物学", "工程学", "计算机学"])
>>> print(college1)
{'哲学', '法学', '工程学', '计算机学', '生物学', '教育学', '经济学'}
# 参数是元组
>>> college1 = {"哲学", "经济学", "法学", "教育学"}
>>> t1 = ("生物学", "工程学", "计算机学")
>>> college1.update(t1)
>>> print(college1)
{'哲学', '法学', '工程学', '计算机学', '生物学', '教育学', '经济学'}
3.3 删
函数:remove()
用法:集合.remove(元素)
如果删除不存在的元素会报错
# 先删后增,就相当于改
>>> college1 = {"哲学", "经济学", "法学", "教育学"}
>>> college1.remove("教育学")
>>> college1.add("医学")
>>> print(college1)
{'哲学', '法学', '医学', '经济学'}
函数:discard
用法:集合.discard(元素)
静默删除,当要删除的元素不存在时亦不报错
>>> college1 = {"哲学", "经济学", "法学", "教育学"}
>>> college1.discard("哲学")
>>> print(college1)
{'教育学', '经济学', '法学'}
3.4 集合的遍历
for..in 集合:
# 每次执行循环后的结果顺序都不相同
college1 = {"哲学", "经济学", "法学", "教育学"}
for i in college1:
print(i)
-- run --
法学
教育学
哲学
经济学
3.5 判断集合元素存在与否
是否存在:元素 in 集合
是否不存在:元素 not in 集合
in 存在返回 True,不存在返回 False
not in 则相反
>>> college1 = {"哲学", "经济学", "法学", "教育学"}
>>> print("哲学" in college1)
True
>>> print("计算机学" not in college1)
True
4. 集合的运算
4.1 交集
函数:intersection()
用法:集合1.intersection(集合2)
获取两个集合间都存在的元素
函数:intersection_updata()
用法:集合1.intersection_updata(集合2)
将交集结果覆盖写入集合1
也可以直接用 集合 = 交集结果 的方式来更新原集合
>>> college1 = {"哲学", "经济学", "法学", "教育学"}
>>> college2 = {'哲学', '历史学', '金融学', '文学', '经济学'}
# 查看交集结果
>>> college3 = college1.intersection(college2)
>>> print(college3)
{'哲学', '经济学'}
# 将结果写入集合1
>>> college1.intersection_update(college2)
>>> print(college1)
{'哲学', '经济学'}
4.2 并集
函数:union()
用法:集合1.union(集合2)
将两个集合进行合并,去重,形成的一个新的完整的集合
并集中没有更新原集合的函数,不过可以用赋值 集合 = 并集结果 的方式来更新原集合
>>> college1 = {"哲学", "经济学", "法学", "教育学"}
>>> college2 = {'哲学', '历史学', '金融学', '文学', '经济学'}
# 查看并集结果
>>> college3 = college1.union(college2)
>>> print(college3)
{'哲学', '法学', '历史学', '金融学', '教育学', '文学', '经济学'}
# 利用赋值将并集结果更新至集合1
>>> college1 = college1.union(college2)
>>> print(college1)
{'哲学', '法学', '历史学', '金融学', '教育学', '文学', '经济学'}
4.3 差集
函数:difference()
用法:集合1.difference(集合2)
获取集合1在集合2中不存在的部分
两个集合的前后顺序不同,结果也将不同
函数:difference_updata()
用法:集合1.difference_updata(集合2)
将单向差集结果更新至集合1
>>> college1 = {"哲学", "经济学", "法学", "教育学"}
>>> college2 = {'哲学', '历史学', '金融学', '文学', '经济学'}
# 集合顺序影响结果
>>> college3 = college1.difference(college2)
>>> print(college3)
{'教育学', '法学'}
>>> college3 = college2.difference(college1)
>>> print(college3)
{'历史学', '文学', '金融学'}
# 将单向差集结果更新至集合1
>>> college1.difference_update(college2)
>>> print(college1)
{'法学', '教育学'}
函数:symmetric_difference()
用法:集合1.difference_difference(集合2)
将两个集合在对方集合中不存在的部分整合成一个新集合
函数:symmetric_difference_update()
用法:集合1.symmetric_difference_update(集合2)
将双向差集结果更新至集合1
>>> college1 = {"哲学", "经济学", "法学", "教育学"}
>>> college2 = {'哲学', '历史学', '金融学', '文学', '经济学'}
# 查看双向差集结果
>>> college3 = college1.symmetric_difference(college2)
>>> print(college3)
{'金融学', '法学', '历史学', '教育学', '文学'}
# 将双向差集结果更新至集合1
>>> print(college1)
{'法学', '历史学', '金融学', '教育学', '文学'}
5. 集合的关系判断
5.1 相等与否判断
相同判断:==
不同判断:!=
比较运算符 == 表示两个集合的元素完全相同则返回 True ,不同返回 False
!= 则相反
>>> s1 = {1, 2, 3, 4, 5, 6}
>>> s2 = {6, 5, 4, 3, 2, 1}
>>> print(s1 == s2)
True
>>> s1 = {1, 2, 3, 4, 5, 6}
>>> s2 = {1, 2, 3, 4, 5, 6, 7}
>>> print(s1 == s2)
False
5.2 子集判断
函数:issubset()
用法:集合1.issubset(集合2)
*判断集合1是否是集合2的子集(解释:如果集合2里包含了集合1的所有元素,那么集合1就是集合2的子集,集合2是集合1的父集)
是子集返回 True ,不是返回 False
# s1是s2的子集
>>> s1 = {4, 5, 6, 7}
>>> s2 = {1, 2, 3, 4, 5, 6, 7, 8}
>>> print(s1.issubset(s2))
True
# s3不是s4的子集
>>> s3 = {4, 5, 6, 7, 10}
>>> s4 = {1, 2, 3, 4, 5, 6, 7, 8}
>>> print(s3.issubset(s4))
False
5.3 父集判断
函数:issuperset()
用法:集合1.issuperset(集合2)
判断集合1是否为集合2的父集
是父集返回 True ,不是返回 False
# s2不是s1的父集
>>> s1 = {4, 5, 6, 7, 10}
>>> s2 = {1, 2, 3, 4, 5, 6, 7, 8}
>>> print(s2.issuperset(s1))
False
# s4是s3的父集
>>> s3 = {4, 5, 6, 7}
>>> s4 = {1, 2, 3, 4, 5, 6, 7, 8}
>>> print(s4.issuperset(s3))
True
5.4 重复元素判断
函数:isdisjoint()
用法:集合1.isdisjoint(集合2)
判断两个集合是否存在重复元素
存在相同元素返回 False 没有相同元素则返回 True
# 存在相同元素
>>> s1 = {5}
>>> s2 = {1, 3, 5, 7, 9}
>>> print(s1.isdisjoint(s2))
False
# 不存在相同元素
>>> s3 = {6}
>>> s4 = {1, 3, 5, 7, 9}
>>> print(s3.isdisjoint(s4))
True