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的staticmethod与classmethod实现实例代码
Feb 11 Python
python求最大连续子数组的和
Jul 07 Python
使用pytorch进行图像的顺序读取方法
Jul 27 Python
PyQt5实现五子棋游戏(人机对弈)
Mar 24 Python
pandas中DataFrame修改index、columns名的方法示例
Aug 02 Python
python安装本地whl的实例步骤
Oct 12 Python
Python3并发写文件与Python对比
Nov 20 Python
Python内置加密模块用法解析
Nov 25 Python
tensorflow 环境变量设置方式
Feb 06 Python
Python随机数函数代码实例解析
Feb 09 Python
520使用Python实现“我爱你”表白
May 20 Python
基于Python的自媒体小助手---登录页面的实现代码
Jun 29 Python
python基础之类属性和实例属性
python基础之类方法和静态方法
Python Matplotlib绘制条形图的全过程
python基础之模块的导入
python基础之文件操作
python基础之错误和异常处理
Python中递归以及递归遍历目录详解
Oct 24 #Python
You might like
apache2.2.4+mysql5.0.77+php5.2.8安装精简
2009/04/29 PHP
PHP数字和字符串ID互转函数(类似优酷ID)
2014/06/30 PHP
jquery tools系列 expose 学习
2009/09/06 Javascript
Array.prototype.slice.apply的使用方法
2010/03/17 Javascript
Jquery数独游戏解析(一)-页面布局
2010/11/05 Javascript
事件冒泡是什么如何用jquery阻止事件冒泡
2013/03/20 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
在js文件中写el表达式取不到值的原因及解决方法
2013/12/23 Javascript
js调试系列 断点与动态调试[基础篇]
2014/06/18 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
2015/04/06 Javascript
js实现TAB切换对应不同颜色的代码
2015/08/31 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
2020/09/01 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
基于JS实现bookstore静态页面的实例代码
2017/02/22 Javascript
原生js二级联动效果
2017/06/20 Javascript
jQuery控制input只能输入数字和两位小数的方法
2019/05/16 jQuery
Python修改MP3文件的方法
2015/06/15 Python
python select.select模块通信全过程解析
2017/09/20 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
2018/05/30 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
python开发游戏的前期准备
2019/05/05 Python
了解不常见但是实用的Python技巧
2019/05/23 Python
对python 树状嵌套结构的实现思路详解
2019/08/09 Python
Tensorflow读取并输出已保存模型的权重数值方式
2020/01/04 Python
解决python虚拟环境切换无效的问题
2020/04/30 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
python常量折叠基础知识点讲解
2021/02/28 Python
英国花园家具中心:Garden Furniture Centre
2017/08/24 全球购物
三八活动策划方案
2014/08/17 职场文书
考研复习计划
2015/01/19 职场文书
刑事法律意见书
2015/06/04 职场文书
工作时间证明
2015/06/15 职场文书
在python中实现导入一个需要传参的模块
2021/05/12 Python
PHP实现两种排课方式
2021/06/26 PHP
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android