Python集合的基础操作


Posted in Python onNovember 01, 2021

1、集合

Python中的集合和数学上的集合基本是没有区别的,是无序的,即不可以使用索引访问的,集合中是不能出现重复元素的。

2、创建集合

Python中创建集合使用花括号{}字面量的方式,或者使用set()来创建一个集合。使用{}中必须至少含一个元素,创建空集合不能使用{},这样创建的是空字典,应该使用set()的方式来创建一个集合。

# 使用字面量方法创建集合
set1 = {"Hello", "World"}
print(type(set1), set1)  # <class 'set'> {'World', 'Hello'}
# print(set1[1]) # TypeError: 'set' object does not support indexing

# 使用set()的方式创建
set2 = set("hello")  # {'l', 'o', 'h', 'e'}集合会去掉重复的元素,即"l"
print(set2)

# 创建空集合
set3 = {}
set4 = set()
print(type(set3), type(set4))  # <class 'dict'>字典 <class 'set'>

list1 = [1, 2, 3, 4, 3, 5, 1, 3]
# 将列表转换为集合
set6 = set(list1)
print(type(set6), set6)  # <class 'set'> {1, 2, 3, 4, 5}

# 使用生成列生成列表
set5 = {num for num in range(20) if num % 3 == 0}
print(set5)  # {0, 3, 6, 9, 12, 15, 18}

# 遍历循环
for ch in set5:
    print(ch)

注意:集合中的元素为不可变的类型,如整数、浮点、字符串、元组等,也就是说可变类型不能作为元组的元素,集合本身也是可变类型,所以集合不能够作为集合中的元素。

3、集合的运算

集合数据类型拥有超多的运算符,包括成员运算、交集运算、并集运算、差集运算、比较运算(相等性、子集、超集)等。

3.1 成员运算

可以通过成员运算innot in 检查元素是否在集合中,

示例代码如下:

set1 = {"你好", "Python", "这个是", "集合", "set"}
print("Python" in set1)  # True
print("您好" in set1)  # False
print("set" not in set1)  # False
print("list" not in set1)  # True

3.2 交并差运算

Python中的集合跟数学上的集合一样,可以进行交集、并集、差集等运算,而且可以通过运算符和方法调用两种方式来进行操作。

示例代码如下:

set1 = {1, 2, 3, 4, 5, 6, 7}
set2 = {2, 4, 6, 8, 10}

# 交集(咱俩都有的)
# 方法一: 使用 & 运算符
print(set1 & set2)                # {2, 4, 6}
# 方法二: 使用intersection方法
print(set1.intersection(set2))    # {2, 4, 6}

# 并集(咱俩加在一起)
# 方法一: 使用 | 运算符
print(set1 | set2)         # {1, 2, 3, 4, 5, 6, 7, 8, 10}
# 方法二: 使用union方法
print(set1.union(set2))    # {1, 2, 3, 4, 5, 6, 7, 8, 10}

# 差集(我不要你有的)
# 方法一: 使用 - 运算符
print(set1 - set2)              # {1, 3, 5, 7}
# 方法二: 使用difference方法
print(set1.difference(set2))    # {1, 3, 5, 7}

# 对称差(咱俩不要你的和我的,只要专一的)
# 方法一: 使用 ^ 运算符
print(set1 ^ set2)                        # {1, 3, 5, 7, 8, 10}
# 方法二: 使用symmetric_difference方法
print(set1.symmetric_difference(set2))    # {1, 3, 5, 7, 8, 10}
# 方法三: 对称差相当于两个集合的并集减去交集
print((set1 | set2) - (set1 & set2))      # {1, 3, 5, 7, 8, 10}

集合的交集、并集、差集运算还可以跟赋值运算一起构成复合运算,

示例代码如下:

set1 = {1, 3, 5, 7}
set2 = {2, 4, 6}
# 将set1和set2求并集再赋值给set1
# 也可以通过set1.update(set2)来实现
set1 |= set2  # set1 = set1 | set2
print(set1)    # {1, 2, 3, 4, 5, 6, 7}
set3 = {3, 6, 9}
# 将set1和set3求交集再赋值给set1
# 也可以通过set1.intersection_update(set3)来实现
set1 &= set3  # set1 = set1 & set3
print(set1)    # {3, 6}

3.3 比较运算

两个集合可以用==和!=进行相等性判断,如果两个集合中的元素完全相同,那么==比较的结果就是True,否则就是False;!=则反之。

如果集合A的所有的元素也是集合B的元素,就称为A是B的子集,B是A的超集;如果集合A的子级且不等于集合B,那就称为A是B的真子级。判断子集和超集的运算符为<和>。示例代码↓

set1 = {1, 3, 5}
set2 = {1, 2, 3, 4, 5}
set3 = set2
# <运算符表示真子集,<=运算符表示子集
print(set1 < set2, set1 <= set2)    # True True
print(set2 < set3, set2 <= set3)    # False True
# 通过issubset方法也能进行子集判断
print(set1.issubset(set2))      # True
print(set2.issubset(set2))      # True
# issubset方法和<=运算符是等价的

# 反过来可以用issuperset或>运算符进行超集判断
print(set2.issuperset(set1))    # True
print(set2 > set1)              # True

4、集合的方法

集合属于可变列类型,可以通过集合类型的方法对集合的元素进行修改,

示例代码:

# 创建一个空集合
set1 = set()

# 通过add()方法为集合添加元素
set1.add(1)
set1.add(2)
print(set1)  # {1, 2}

# 通过update()给集合添加元素
set1.update({1, 2, 3, 4, 5})
print(set1)  # {1, 2, 3, 4, 5} 元素在集合中已存在,该元素只会出现一次

# 通过discard()方法删除指定元素
set1.discard(4)
set1.discard(2)
set1.discard(22)  # 集合里面没有不会出错
print(set1)  # {1, 3, 5}

# 通过remove()方法删除指定元素
# set1.remove(6) # KeyError: 6,使用remove()方法删除指定元素时先做成员运算就不会出错了
if 6 in set1:
    set1.remove(6)

# pop方法可以从集合中随机删除一个元素并返回该元素
print(set1.pop())  # 1 本次剔除的是1

# clear方法可以清空整个集合
set1.clear()
print(type(set1))  # <class 'set'>
print(set1)    # set()

# 通过isdisjoint()方法判断两个集合有没有重复的元素,有返回False没有则返回Ture
set2 = {"Hello", "World"}
set3 = {"Hello", "一碗周"}
set4 = {"Hi", "Python"}
print(set2.isdisjoint(set3))  # False
print(set2.isdisjoint(set4))  # True

5、不可变集合

Python中还有一种不可变类型的集合,名字叫frozenset,于集合的区别就跟列表和元组的区别一样。除了不能添加和删除元素,frozenset在其他方面跟set基本是一样的。

示例代码:

set1 = frozenset({1, 3, 5, 7})
set2 = frozenset(range(1, 6))
print(set1 & set2)    # frozenset({1, 3, 5})
print(set1 | set2)    # frozenset({1, 2, 3, 4, 5, 7})
print(set1 - set2)    # frozenset({7})
print(set1 < set2)    # False

到此这篇关于Python集合的基础操作的文章就介绍到这了,更多相关Python集合内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python判断Abundant Number的方法
Jun 15 Python
Django中使用locals()函数的技巧
Jul 16 Python
Python Socket传输文件示例
Jan 16 Python
利用python爬取斗鱼app中照片方法实例
Dec 03 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
Oct 31 Python
用Python实现将一张图片分成9宫格的示例
Jul 05 Python
基于torch.where和布尔索引的速度比较
Jan 02 Python
python实现快递价格查询系统
Mar 03 Python
python批量修改xml属性的实现方式
Mar 05 Python
Python 如何调试程序崩溃错误
Aug 03 Python
用Python远程登陆服务器的步骤
Apr 16 Python
python 闭包函数详细介绍
Apr 19 Python
python基础之类属性和实例属性
python基础之类方法和静态方法
Python Matplotlib绘制条形图的全过程
python基础之模块的导入
python基础之文件操作
python基础之错误和异常处理
Python中递归以及递归遍历目录详解
Oct 24 #Python
You might like
fckeditor上传文件按日期存放及重命名方法
2015/05/22 PHP
PHP实现活动人选抽奖功能
2017/04/19 PHP
PHP实现下载远程图片保存到本地的方法
2017/06/19 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
2019/12/13 PHP
PHP如何解决微信文章图片防盗链
2020/12/09 PHP
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级
2010/10/14 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
jquery及原生js获取select下拉框选中的值示例
2013/10/25 Javascript
nodejs npm包管理的配置方法及常用命令介绍
2014/06/05 NodeJs
JavaScript中神奇的call()方法
2015/03/12 Javascript
jQuery基于扩展实现的倒计时效果
2016/05/14 Javascript
node.js的事件机制
2017/02/08 Javascript
JavaScript数组_动力节点Java学院整理
2017/06/26 Javascript
vue组件父子间通信之综合练习(聊天室)
2017/11/07 Javascript
详解微信小程序input标签正则初体验
2018/08/18 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
python模拟新浪微博登陆功能(新浪微博爬虫)
2013/12/24 Python
Python字典创建 遍历 添加等实用基础操作技巧
2018/09/13 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
Python绘制股票移动均线的实例
2019/08/24 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
python数据分析工具之 matplotlib详解
2020/04/09 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
2020/09/14 Python
python在linux环境下安装skimage的示例代码
2020/10/14 Python
详解Canvas事件绑定
2018/06/27 HTML / CSS
党员岗位承诺口号大全
2014/03/28 职场文书
给孩子的新年寄语
2014/04/08 职场文书
支部书记四风问题对照检查材料
2014/10/04 职场文书
教师节倡议书2015
2015/04/27 职场文书
运动会表扬稿范文
2015/05/05 职场文书
高三数学教学反思
2016/02/18 职场文书
如何利用 CSS Overview 面板重构优化你的网站
2021/10/24 HTML / CSS
关于ObjectUtils.isEmpty() 和 null 的区别
2022/02/28 Java/Android