python 集合的使用,案例详解

集合的定义:

1.不同元素组成

2.无序

3.集合中的元素必须是不可变类型

创建集合

s = {1,2,3,4,5,6,7,8}
>>> set_test = set('hello')
>>> set_test
{'h', 'l', 'e', 'o'}  # 由此可见集合中的元素不可重复,都是不同的

集合运算

集合之间也可进行数学集合运算(例如:并集、交集等),可用相应的操作符或方法来实现。

子集

子集,为某个集合中一部分的集合,故亦称部分集合。

使用操作符 < 执行子集操作,同样地,也可使用方法 issubset() 完成。

>>> A = set('abcd')
>>> B = set('cdef')
>>> C = set("ab")
>>> C < A
True         # C 是 A 的子集
>>> C < B
False
>>> C.issubset(A)
True

并集

一组集合的并集是这些集合的所有元素构成的集合,而不包含其他元素。

使用操作符 | 执行并集操作,同样地,也可使用方法 union() 完成。

>>> A | B
{'c', 'b', 'f', 'd', 'e', 'a'}
>>> A.union(B)
{'c', 'b', 'f', 'd', 'e', 'a'}

交集

两个集合 A 和 B 的交集是含有所有既属于 A 又属于 B 的元素,而没有其他元素的集合。

使用 & 操作符执行交集操作,同样地,也可使用方法 intersection() 完成。

>>> A & B
{'c', 'd'}
>>> A.intersection(B)
{'c', 'd'}

差集

A 与 B 的差集是所有属于 A 且不属于 B 的元素构成的集合

使用操作符 - 执行差集操作,同样地,也可使用方法 difference() 完成。

>>> A - B
{'b', 'a'}
>>> A.difference(B)
{'b', 'a'}

对称差

两个集合的对称差是只属于其中一个集合,而不属于另一个集合的元素组成的集合。

使用 ^ 操作符执行差集操作,同样地,也可使用方法 symmetric_difference() 完成。

>>> A ^ B
{'b', 'f', 'e', 'a'}
>>> A.symmetric_difference(B)
{'b', 'f', 'e', 'a'}

集合方法

1.add 向集合中添加元素

>>> s = {1, 2, 3, 4, 5, 6}
>>> s.add("s")
>>> s
{1, 2, 3, 4, 5, 6, 's'}

2.clear 清空集合

>>> s = {1, 2, 3, 4, 5, 6}
>>> s.clear()
>>> s
set()

3.copy 返回集合的浅拷贝

>>> s = {1, 2, 3, 4, 5, 6}
>>> new_s = s.copy()
>>> new_s
{1, 2, 3, 4, 5, 6}

4.pop 删除并返回任意的集合元素(如果集合为空,会引发 KeyError)

>>> s = {1, 2, 3, 4, 5, 6}
>>> s.pop()  # pop删除时是无序的随机删除
1
>>> s
{2, 3, 4, 5, 6}

5.remove 删除集合中的一个元素(如果元素不存在,会引发 KeyError)

>>> s = {1, 2, 3, 4, 5, 6}
>>> s.remove(3)
>>> s
{1, 2, 4, 5, 6}

6.discard 删除集合中的一个元素(如果元素不存在,则不执行任何操作)

>>> s = {1, 2, 3, 4, 5, 6}
>>> s.discard("sb")
>>> s
{1, 2, 3, 4, 5, 6}

7.intersection 将两个集合的交集作为一个新集合返回

>>> s = {1, 2, 3, 4, 5, 6}
>>> s2 = {3, 4, 5, 6, 7, 8}
>>> s.intersection(s2)
{3, 4, 5, 6}
>>> s&s2  # 可以达到相同的效果
{3, 4, 5, 6}

8.union 将集合的并集作为一个新集合返回

>>> s = {1, 2, 3, 4, 5, 6}
>>> s2 = {3, 4, 5, 6, 7, 8}
>>> print(s.union(s2))
{1, 2, 3, 4, 5, 6, 7, 8}
>>> print(s|s2)    # 用 | 可以达到相同效果
{1, 2, 3, 4, 5, 6, 7, 8}

9.difference 将两个或多个集合的差集作为一个新集合返回

>>> s = {1, 2, 3, 4, 5, 6}
>>> s2 = {3, 4, 5, 6, 7, 8}
>>> print("差集:",s.difference(s2)) # 去除s和s2中相同元素,删除s2 保留s中剩余元素
差集: {1, 2}
>>> print("差集:",s2.difference(s))  # 去除s和s2中相同元素,删除s2 保留s2中剩余元素<br>
差集: {8, 7}
>>> print("差集:",s - s2)    # 符号 - 可以达到相同结果
差集: {1, 2}
>>> print("差集:",s2 - s)    # 符号 - 可以达到相同结果
差集: {8, 7}

10. symmetric_difference 将两个集合的对称差作为一个新集合返回(两个集合合并删除相同部分,其余保留)

>>> s = {1, 2, 3, 4, 5, 6}
>>> s2 = {3, 4, 5, 6, 7, 8}
>>> s.symmetric_difference(s2)
{1, 2, 7, 8}

11.update 用自己和另一个的并集来更新这个集合

>>> s = {'p', 'y'}
>>> s.update(['t', 'h', 'o', 'n'])    # 添加多个元素
>>> s
{'p', 't', 'o', 'y', 'h', 'n'}
>>> s.update(['H', 'e'], {'l', 'l', 'o'})    # 添加列表和集合
>>> s
{'p', 'H', 't', 'l', 'o', 'y', 'e', 'h', 'n'}

12.intersection_update()  用自己和另一个的交集来更新这个集合

>>> s = {'a', 'b', 'c', 'd', 'q'}
>>> s2 = {'c', 'd', 'e', 'f'}
>>> s.intersection_update(s2)   # 相当于s = s - s2
>>> s
{'c', 'd'}

13.isdisjoint()  如果两个集合有一个空交集,返回 True

>>> s = {1, 2}
>>> s1 = {3, 4}
>>> s2 = {2, 3}
>>> s.isdisjoint(s1)   
True                               # s  和 s1 两个集合的交集为空返回 True
>>> s.isdisjoint(s2)
False                             # s  和 s2 两个集合的交集为 2 不是空 所有返回False

14.issubset() 如果另一个集合包含这个集合,返回 True

>>> s = {1, 2, 3}
>>> s1 = {1, 2, 3, 4}
>>> s2 = {2, 3}
>>> s.issubset(s1)
True                            # 因为 s1 集合 包含 s 集合
>>> s.issubset(s2)
False                           # s2 集合 不包含 s 集合

15.issuperset()  如果这个集合包含另一个集合,返回 True

>>> s = {1, 2, 3}
>>> s1 = {1, 2, 3, 4}
>>> s2 = {2, 3}
>>> s.issuperset(s1)
False                                        # s 集合不包含 s1 集合
>>> s.issuperset(s2)
True                                         # s 集合包含 s2 集合

16.difference_update() 从这个集合中删除另一个集合的所有元素

>>> s = {1, 2, 3}
>>> s1 = {1, 2, 3, 4}
>>> s2 = {2, 3}
>>> s.difference_update(s2)
>>> s
{1}                                                   # s2中的2,3   s集合中也有2,3  所以保留1
>>> s1.difference_update(s2)
>>> s1
{1, 4}

17.symmetric_difference_update() 用自己和另一个的对称差来更新这个集合

>>> s = {1, 2, 3}
>>> s1 = {1, 2, 3, 4}
>>> s2 = {2, 3}
>>> s1.symmetric_difference_update(s)
>>> s1
{4}
>>> s1.symmetric_difference_update(s2)
>>> s1
{2, 3, 4}
>>> s.symmetric_difference_update(s2)
>>> s
{1}

集合与内置函数

下述内置函数通常作用于集合,来执行不同的任务。

函数 描述
all() 如果集合中的所有元素都是 True(或者集合为空),则返回 True。
any() 如果集合中的所有元素都是 True,则返回 True;如果集合为空,则返回 False。
enumerate() 返回一个枚举对象,其中包含了集合中所有元素的索引和值(配对)。
len() 返回集合的长度(元素个数)
max() 返回集合中的最大项
min() 返回集合中的最小项
sorted() 从集合中的元素返回新的排序列表(不排序集合本身)
sum() 返回集合的所有元素之和

125jz网原创文章。发布者:江山如画,转载请注明出处:http://www.125jz.com/4641.html

(1)
江山如画的头像江山如画管理团队
python 字典的使用案例二:求平均分,并按平均分由高到低输出选手编号和最后得分
上一篇 2020年1月22日 下午5:24
python 集合使用案例:选修课统计
下一篇 2020年1月22日 下午6:58

99%的人还看了以下文章

  • Java GUI编程高级实例二:弹出式菜单及添加工具栏

    三、 为组件定制弹出式菜单 问题的提出  为“Java Editor”程序的文本编辑区域定制如图所示的的弹出式菜单。 菜单中有五个菜单项组成,分别指示了不同的字体风格,可通过菜单项的选择实现文本区域中文本字体和字号的改变。 用JPopupMenu类建立弹出式菜单 建立弹出式菜单 预先定义一个继承JPopupMenu类的子类,弹出式菜单施加给的对象应由构造方法…

    2020年1月22日
    9.9K0
  • Java向mysql数据库插入datetime类型数据实例(精)

    在Mysql数据库中日期跟时间有两种: 1、date类型,date类型也就是我们常见的储存yyyy-MM-dd类型的日期,它不能储存时间,也就是只能储存日期, 2、dateitme就是可以储存日期同时也可以储存时间。 datetime可以保存1000-01-01到 9999-12-31的日期。 上面mysql数据库中birthday字段类型设置的是datet…

    2018年5月2日
    21.2K0
  • HTTP错误 403.14 服务器配置为不列出此目录内容

    HTTP错误 403.14 服务器配置为不列出此目录内容HTTP错误 403.14 服务器配置为不列出此目录内容HTTP错误 403.14 服务器配置为不列出此目录内容HTTP错误 403.14 服务器配置为不列出此目录内容

    开发一个企业网站,使用ASP技术,在本地通过IIS管理器调试,出现 如下问题: HTTP 错误 403.14 – Forbidden Web 服务器被配置为不列出此目录的内容 解决方法: 在”功能视图“,中找到”目录浏览“,双击进入 在目录浏览右侧操作中选择”启用“! 这时再浏览网站,可以看到已经不报错了,但是网站是以文件目录的形式展现的! 这是…

    2018年7月3日 编程开发
    5.7K0
  • 第三章 JSP技术1

    了解JSP相关技术
    掌握JSP基本语法
    掌握JSP指令标识和动作标识
    掌握JSP的内置对象及使用

    2018年2月2日
    10.6K0
  • Pandas读取excel:Excel file format cannot be determined解决方法

    Pandas读取excel时报错,excel表格不能被指定,是什么原因? 这个问题我搞了很久,最后终于搞明白了,网上各种什么utf-8呀,格式化或者另存都不行,我都试过了。 Excel file format cannot be determined解决方法 首先要确定excel已经放在项目目录下,路径是正确的。 一、然后确保安装了所需要的模块 pip in…

    2022年9月11日
    20.1K0
  • python 集合使用案例:选修课统计

    相关阅读:python 集合的使用,案例详解 本学期学校共开设了3门选修课,一个班有25位学生,选修的情况如下: 选修1号课程的同学有: set1 = {‘张三’, ‘李四’, ‘王五’, ‘马六’, ‘赵七’, ‘钱八’} 选修2号课程的同学有: set2 = {‘姬一’, ‘孙必’, ‘周冲’, ‘王五’, ‘方向’, ‘张玉’} 选修3号课程的同学有:…

    2020年1月22日
    9.0K0

发表回复

登录后才能评论