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 相关文章推荐
浅谈django中的认证与登录
Oct 31 Python
python django 实现验证码的功能实例代码
May 18 Python
python中MethodType方法介绍与使用示例
Aug 03 Python
python3 pillow生成简单验证码图片的示例
Sep 19 Python
python flask框架实现重定向功能示例
Jul 02 Python
用python建立两个Y轴的XY曲线图方法
Jul 08 Python
解决python 读取excel时 日期变成数字并加.0的问题
Oct 08 Python
python中文分词库jieba使用方法详解
Feb 11 Python
翻转数列python实现,求前n项和,并能输出整个数列的案例
May 03 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
Jun 02 Python
使用Python爬取小姐姐图片(beautifulsoup法)
Feb 11 Python
Python开发简易五子棋小游戏
May 02 Python
python基础之类属性和实例属性
python基础之类方法和静态方法
Python Matplotlib绘制条形图的全过程
python基础之模块的导入
python基础之文件操作
python基础之错误和异常处理
Python中递归以及递归遍历目录详解
Oct 24 #Python
You might like
Parse正式发布开源PHP SDK
2014/08/11 PHP
php简单统计在线人数的方法
2016/05/10 PHP
Nginx环境下PHP flush失效的解决方法
2016/10/19 PHP
php如何修改SESSION的生存存储时间的实例代码
2017/07/05 PHP
jquery ajax请求实例深入解析
2012/11/26 Javascript
div失去焦点事件实现思路
2014/04/22 Javascript
js实现字符串的16进制编码不加密
2014/04/25 Javascript
jQuery焦点图切换简易插件制作过程全纪录
2014/08/27 Javascript
Javascript实现Array和String互转换的方法
2015/12/21 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
2016/11/25 Javascript
jQuery实现文档树效果
2017/02/20 Javascript
iview给radio按钮组件加点击事件的实例
2017/09/30 Javascript
微信小程序使用slider设置数据值及switch开关组件功能【附源码下载】
2017/12/09 Javascript
Vue.js 事件修饰符的使用教程
2018/11/01 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
2019/03/19 Javascript
vue实现随机验证码功能的实例代码
2019/04/30 Javascript
详解Vue前端生产环境发布配置实战篇
2019/05/07 Javascript
js canvas实现5张图片合成一张图片
2019/07/15 Javascript
如何在vue中使用百度地图添加自定义覆盖物(水波纹)
2020/11/03 Javascript
利用JS判断元素是否为数组的方法示例
2021/01/08 Javascript
[01:20]2018DOTA2亚洲邀请赛总决赛战队LGD晋级之路
2018/04/07 DOTA
使用python提取html文件中的特定数据的实现代码
2013/03/24 Python
Python OpenCV 直方图的计算与显示的方法示例
2018/02/08 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
2018/03/20 Python
Python 切分数组实例解析
2019/11/07 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
移动端HTML5 input常见问题(小结)
2020/09/28 HTML / CSS
乐天旅游台湾网站:Rakuten Travel TW
2017/06/01 全球购物
Melissa鞋马来西亚官方网站:MDreams马来西亚
2018/04/05 全球购物
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
简历自我评价怎么写呢?
2014/01/06 职场文书
元旦红领巾广播稿
2014/02/19 职场文书
旅游饭店管理专业自荐书
2014/06/28 职场文书
群众路线教育实践活动对照检查材料思想汇报(副处级领导)
2014/10/04 职场文书
关于JavaScript轮播图的实现
2021/11/20 Javascript
HTML5基础学习之文本标签控制
2022/03/25 HTML / CSS