Python集合


1. 简介

  • \color{green}{什么是集合:}

集合是Python中的内置数据结构
集合可被看做是没有value的字典

  • \color{grey}{集合的特点:}

集合元素是无序的
集合元素不能重复
集合是可变的
集合允许数学运算
集合是分散存储的



2. 集合的创建

  • \color{green}{直接创建:}

集合名 = {元素, 元素, 元素}

集合就是没有value的字典,创建方法与字典相同

  • \color{blue}{示例:}
# 创建前与创建后的元素排列顺序是不同的
>>> college1 = {"哲学", "经济学", "法学", "教育学"}
>>> print(college1)
{'教育学', '哲学', '经济学', '法学'}

# 不能使用{}创建空集合
>>> set1 = {}
>>> print(set1, type(set1))
{} <class 'dict'>

创建空集合不能使用 集合 = {} 形式,因为这是创建空字典,创建空集合要使用函数 set()

  • \color{green}{利用函数创建:}

函数:set()
用法:集合名 = set(参数)

函数 set()将已有的其它类型数据转换为集合,其中,数据类型可以是:列表、元组、字典、字符串、数字序列等 注意:转换字典为集合时,只会保留字典的key

  • \color{blue}{示例:}
# 创建一个空集合
>>> set1 = set()
>>> print(set1, type(set1))
set() <class 'set'>

# 转换列表为集合
>>> college2 = set(["哲学", "经济学", "金融学", "文学", "历史学"])
>>> print(college2)
{'哲学', '历史学', '金融学', '文学', '经济学'}

# 转换字符串为集合
>>> s2 = set("中华人民共和国")
>>> print(s2)
{'华', '民', '和', '共', '人', '国', '中'}


3. 操作集合元素


3.1 查和改

  • \color{red}{注意:}

:集合是无序的,不支持索引取值
:集合不支持更新操作,只能 先删除再创建

3.2 增

  • \color{green}{增加单个元素:}

函数:add()
用法:集合.add(元素)

元素存在则忽略,没有则新增,一次只能添加一个元素

  • \color{blue}{示例:}
>>> college1 = {"哲学", "经济学", "法学", "教育学"}
>>> college1.add("计算机学")
>>> print(college1)
{'哲学', '法学', '计算机学', '教育学', '经济学'}
  • \color{green}{多个元素增加:}

函数:update()
用法:集合.update(列表/元组)

参数可以是列表或者元组

  • \color{blue}{示例:}
# 参数是列表
>>> college1 = {"哲学", "经济学", "法学", "教育学"}
>>> college1.update(["生物学", "工程学", "计算机学"])
>>> print(college1)
{'哲学', '法学', '工程学', '计算机学', '生物学', '教育学', '经济学'}

# 参数是元组
>>> college1 = {"哲学", "经济学", "法学", "教育学"}
>>> t1 = ("生物学", "工程学", "计算机学")
>>> college1.update(t1)
>>> print(college1)
{'哲学', '法学', '工程学', '计算机学', '生物学', '教育学', '经济学'}

3.3 删

  • \color{green}{方法1:}

函数:remove()
用法:集合.remove(元素)

如果删除不存在的元素会报错

# 先删后增,就相当于改
>>> college1 = {"哲学", "经济学", "法学", "教育学"}
>>> college1.remove("教育学")
>>> college1.add("医学")
>>> print(college1)
{'哲学', '法学', '医学', '经济学'}
  • \color{green}{方法2:}

函数:discard
用法:集合.discard(元素)

静默删除,当要删除的元素不存在时亦不报错

  • \color{blue}{示例:}
>>> college1 = {"哲学", "经济学", "法学", "教育学"}
>>> college1.discard("哲学")
>>> print(college1)
{'教育学', '经济学', '法学'}

3.4 集合的遍历

  • \color{green}{方法:}

for..in 集合:

  • \color{blue}{示例:}
# 每次执行循环后的结果顺序都不相同
college1 = {"哲学", "经济学", "法学", "教育学"}
for i in college1:
    print(i)
  -- run --
法学
教育学
哲学
经济学

3.5 判断集合元素存在与否

  • \color{green}{成员运算符:}

是否存在:元素 in 集合
是否不存在:元素 not in 集合

in 存在返回 True不存在返回 False
not in 则相反

  • \color{blue}{示例:}
>>> college1 = {"哲学", "经济学", "法学", "教育学"}
>>> print("哲学" in college1)
True
>>> print("计算机学" not in college1)
True


4. 集合的运算


4.1 交集

  • \color{green}{查看:}

函数:intersection()
用法:集合1.intersection(集合2)

获取两个集合间都存在的元素

  • \color{cyan}{更新:}

函数:intersection_updata()
用法:集合1.intersection_updata(集合2)

将交集结果覆盖写入集合1
也可以直接用 集合 = 交集结果 的方式来更新原集合

  • \color{blue}{示例:}
>>> college1 = {"哲学", "经济学", "法学", "教育学"}
>>> college2 = {'哲学', '历史学', '金融学', '文学', '经济学'}

# 查看交集结果
>>> college3 = college1.intersection(college2)
>>> print(college3)
{'哲学', '经济学'}

# 将结果写入集合1
>>> college1.intersection_update(college2)
>>> print(college1)
{'哲学', '经济学'}

4.2 并集

  • \color{green}{查看:}

函数:union()
用法:集合1.union(集合2)

将两个集合进行合并,去重,形成的一个新的完整的集合
并集中没有更新原集合的函数,不过可以用赋值 集合 = 并集结果 的方式来更新原集合

  • \color{blue}{示例:}
>>> college1 = {"哲学", "经济学", "法学", "教育学"}
>>> college2 = {'哲学', '历史学', '金融学', '文学', '经济学'}

# 查看并集结果
>>> college3 = college1.union(college2)
>>> print(college3)
{'哲学', '法学', '历史学', '金融学', '教育学', '文学', '经济学'}

# 利用赋值将并集结果更新至集合1
>>> college1 = college1.union(college2)
>>> print(college1)
{'哲学', '法学', '历史学', '金融学', '教育学', '文学', '经济学'}

4.3 差集

  • \color{green}{查看单向差集:}

函数:difference()
用法:集合1.difference(集合2)

获取集合1在集合2中不存在的部分
两个集合的前后顺序不同,结果也将不同

  • \color{cyan}{更新:}

函数:difference_updata()
用法:集合1.difference_updata(集合2)

将单向差集结果更新至集合1

  • \color{blue}{单向差集示例:}
>>> college1 = {"哲学", "经济学", "法学", "教育学"}
>>> college2 = {'哲学', '历史学', '金融学', '文学', '经济学'}

# 集合顺序影响结果
>>> college3 = college1.difference(college2)
>>> print(college3)
{'教育学', '法学'}
>>> college3 = college2.difference(college1)
>>> print(college3)
{'历史学', '文学', '金融学'}

# 将单向差集结果更新至集合1
>>> college1.difference_update(college2)
>>> print(college1)
{'法学', '教育学'}
  • \color{green}{查看双向差集:}

函数:symmetric_difference()
用法:集合1.difference_difference(集合2)

将两个集合在对方集合中不存在的部分整合成一个新集合

  • \color{cyan}{更新:}

函数:symmetric_difference_update()
用法:集合1.symmetric_difference_update(集合2)

将双向差集结果更新至集合1

  • \color{blue}{双向差集示例:}
>>> college1 = {"哲学", "经济学", "法学", "教育学"}
>>> college2 = {'哲学', '历史学', '金融学', '文学', '经济学'}

# 查看双向差集结果
>>> college3 = college1.symmetric_difference(college2)
>>> print(college3)
{'金融学', '法学', '历史学', '教育学', '文学'}

# 将双向差集结果更新至集合1
>>> print(college1)
{'法学', '历史学', '金融学', '教育学', '文学'}


5. 集合的关系判断


5.1 相等与否判断

  • \color{green}{比较运算符:}

相同判断:==
不同判断:!=

比较运算符 == 表示两个集合的元素完全相同则返回 True ,不同返回 False
!= 则相反

  • \color{blue}{示例:}
>>> 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 子集判断

  • \color{green}{方法:}

函数:issubset()
用法:集合1.issubset(集合2)

*判断集合1是否是集合2的子集(解释:如果集合2里包含了集合1的所有元素,那么集合1就是集合2的子集,集合2是集合1的父集)
是子集返回 True ,不是返回 False

  • \color{blue}{示例:}
# 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 父集判断

  • \color{green}{方法:}

函数:issuperset()
用法:集合1.issuperset(集合2)

判断集合1是否为集合2的父集
是父集返回 True ,不是返回 False

  • \color{blue}{示例:}
# 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 重复元素判断

  • \color{green}{方法:}

函数:isdisjoint()
用法:集合1.isdisjoint(集合2)

判断两个集合是否存在重复元素
存在相同元素返回 False 没有相同元素则返回 True

  • \color{blue}{示例:}
# 存在相同元素
>>> 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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。