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 算法 排序实现快速排序
Jun 05 Python
用python读写excel的方法
Nov 18 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
Jul 01 Python
python实现百万答题自动百度搜索答案
Jan 16 Python
mac下如何将python2.7改为python3
Jul 13 Python
Python中flatten( )函数及函数用法详解
Nov 02 Python
python Tensor和Array对比分析
Jan 08 Python
python生成大写32位uuid代码
Mar 03 Python
Python自省及反射原理实例详解
Jul 06 Python
python selenium xpath定位操作
Sep 01 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
Jan 29 Python
Python将QQ聊天记录生成词云的示例代码
Feb 10 Python
python基础之类属性和实例属性
python基础之类方法和静态方法
Python Matplotlib绘制条形图的全过程
python基础之模块的导入
python基础之文件操作
python基础之错误和异常处理
Python中递归以及递归遍历目录详解
Oct 24 #Python
You might like
使用 php4 加速 web 传输
2006/10/09 PHP
使用PHP实现Mysql读写分离
2013/06/28 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
YII实现分页的方法
2014/07/09 PHP
双冒号 ::在PHP中的使用情况
2015/11/05 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
作为PHP程序员你要知道的另外一种日志
2018/07/30 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
客户端脚本中常常出现的一些问题和调试技巧
2007/01/09 Javascript
javascript addBookmark 加入收藏 多浏览器兼容
2009/08/15 Javascript
Node.js 制作实时多人游戏框架
2015/01/08 Javascript
探寻JavaScript中this指针指向
2016/04/23 Javascript
ajax异步请求详解
2017/01/06 Javascript
JavaScript日期选择功能示例
2017/01/16 Javascript
使用selenium抓取淘宝的商品信息实例
2018/02/06 Javascript
Node.js进阶之核心模块https入门
2018/05/23 Javascript
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
JS如何获取地址栏的参数实例讲解
2018/10/06 Javascript
解决微信浏览器缓存站点入口文件(IIS部署Vue项目)
2019/06/17 Javascript
js校验开始时间和结束时间
2020/05/26 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
[01:29]Ti4循环赛第三日精彩回顾
2014/07/13 DOTA
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
python通过http下载文件的方法详解
2019/07/26 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
浅谈JupyterNotebook导出pdf解决中文的问题
2020/04/22 Python
python 5个实用的技巧
2020/09/27 Python
移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法
2018/09/19 HTML / CSS
Debenhams爱尔兰:英国知名的百货公司
2017/01/02 全球购物
蔻驰意大利官网:COACH意大利
2019/01/16 全球购物
安全协议书范本
2014/04/21 职场文书
市政工程技术专业自荐书
2014/07/06 职场文书
中国梦党课学习心得体会
2016/01/05 职场文书