python通关 集合操作方法详解
发布日期:2021-06-29 17:34:16
浏览次数:2
分类:技术文章
本文共 4035 字,大约阅读时间需要 13 分钟。
说集合之前,我们先说一个小例子,假设某公司有五个人喜欢打篮球,五个人喜欢打游戏,问即打游戏有打篮球
的人都有哪些?
play_basketball = ['a','b','c','d','e']play_game = ['a','b','c','f','g']both_play=[]for name in play_basketball: if name in play_game: both_play.append(name)print(both_play)结果:['a', 'b', 'c']
在不了解集合之前我们肯定以上面的方法解决问题,但是学了集合之后,我们就有更简单的方法了,是什么呢?让我们慢慢了解。
集合set
集合用于包含一组无序的对象。与列表和元组不同,集合是无序的,也无法通过数字进行索引。此外,集合中的元素不能重复。set和dict一样,只是没有value,相当于dict的key集合,由于dict的key是不重复的,且key是不可变对象因此set也有如下特性:
- 不重复,(互异性),也就是说集合是天生去重的
- 元素为不可变对象,(确定性,元素必须可hash)
- 集合的元素没有先后之分,(无序性)
首先笼统的讲一下python3.x集合的内置函数有17个,分别如下:
序号 | 函数 | 描述 |
1 | add(self, *args, **kwargs) | 是把要传入的元素做为一个整个添加到集合中 |
2 | clear(self, *args, **kwargs) | 清空集合里面的所有元素 |
3 | copy(self, *args, **kwargs) | 复制集合里面的所有元素 ,返回一个浅复制 |
4 | difference(self, *args, **kwargs) | 求两个集合里面的不同的元素 ,又称差 |
5 | difference_update(self, *args, **kwargs) | 返回删除了 set “集合2”中含有的元素后的 set “集合1” |
6 | discard(self, *args, **kwargs) | 如果在 set “集合”中存在元素 x, 则删除 |
7 | intersection(self, *args, **kwargs) | 求两个集合里面相同的元素,又称并 , 返回只保留含有 set “集合2”中元素的 set “集合1” |
8 | intersection_update(self, *args, **kwargs) | , 返回只保留含有 set “集合2”中元素的 set “集合1” ,并更新自己 |
9 | isdisjoint(self, *args, **kwargs) | 判断两个集合是不是不相交,并返回 |
10 | issubset(self, *args, **kwargs) | 判断集合是不是包含其他集合,等同于`a>=b` |
11 | issuperset(self, *args, **kwargs) | 判断集合是不是被其他集合包含,等同于`a<=b` |
12 | pop(self, *args, **kwargs) | 删除并且返回 set “集合”中的一个不确定的元素, 如果为空则引发 KeyError |
13 | remove(self, *args, **kwargs) | 从 set “集合”中删除元素 , 如果不存在则引发 KeyError |
14 | symmetric_difference(self, *args, **kwargs) | 返回一个新的 set 包含 外面 和 里面 中不重复的元素 也就是两个集合不重复的元素 |
15 | symmetric_difference_update(self, *args, **kwargs) | 返回含有 set “里面”或者 set “外面”中有而不是两者都有的元素的 set “外面” |
16 | union(self, *args, **kwargs) | 把两个集合连接起来,又称并 |
17 | update(self, *args, **kwargs) | 可以在集合里面添加多项 |
1,定义集合
#第一种方法nums = [1,2,3,4,5,6,7]num_set = set(nums)print(num_set)结果:{ 1, 2, 3, 4, 5, 6, 7}#第二种方法num_set ={ 1,2,3,4,5,6,7}
2,增(更新)
set.add()
set.update([])
nums = { 1,2,3,4,5,6,7}#set.add()增加只能增加一个,不能增加多个值# nums.add(8)# print(nums)#set.update()可以增加一个字符串,可以增加多个值# nums.update([8])# print(nums)# nums.update('8')# print(nums)nums.update([8,9,10])print(nums)
3,删
set1.remove(1)
nums = { 1,2,3,4,5,6,7}nums.remove(7)print(nums)结果:{ 1, 2, 3, 4, 5, 6}
4,查:无法通过下标索引
5,改:不可变类型无法修改元素
6,交( &)
nums1 ={ 1, 2, 3, 4, 5, 6}nums2 ={ 1, 2, 3, 4, 5, 10,7,8,9}#交的方式一:&a = nums1&nums2print(a)#并的方式二:intersactionb = nums1.intersection(nums2)print(b)结果:{ 1, 2, 3, 4, 5}{ 1, 2, 3, 4, 5}
7,并(|)
nums1 ={ 1, 2, 3, 4, 5, 6}nums2 ={ 1, 2, 3, 4, 5, 10,7,8,9}#并的方式一:|a = nums1|nums2print(a)#并的方式二:uniomb = nums1.union(nums2)print(b)结果:{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
8,差(-)
nums1 ={ 1, 2, 3, 4, 5, 6}nums2 ={ 1, 2, 3, 4, 5, 10,7,8,9}#差的方式一:-a1 = nums1-nums2print(a1)a2 = nums2-nums1print(a2)#差的方式二:differenceb1 = nums1.difference(nums2)print(b1)b2 = nums2.difference(nums1)print(b2)结果:{ 6}{ 8, 9, 10, 7}{ 6}{ 8, 9, 10, 7}
9,对称差集(^)
nums1 ={ 1, 2, 3, 4, 5, 6}nums2 ={ 1, 2, 3, 4, 5, 10,7,8,9}#对称差集表示方法一:^a1 = nums1^nums2print(a1)#对称差集表示方法二:symmetric_differencea2 = nums2.symmetric_difference(nums1)print(a2)结果:{ 6, 7, 8, 9, 10}{ 6, 7, 8, 9, 10}
10,集合转换
se = set(range(4))li = list(se)tu = tuple(se)st = str(se)print(li,type(li))print(tu,type(tu))print(st,type(st))结果:[0, 1, 2, 3] <class 'list'>(0, 1, 2, 3) <class 'tuple'>{ 0, 1, 2, 3} <class 'str'>
补充:frozenset
冰冻集合,是一种特殊的集合类型,也是集合(集合是列表的话,冰冻集合就是元组)
下面创建冰冻集合(一般不会创建空的冰冻集合)
** 同时下面包含函数的补充**
#创建带数据的冰冻集合info = frozenset(('xuexi','gongzuo','kaoyan','xiuxi'))print(info,type(info))#成员监测result = 'gongzuo' in infoprint(result)#遍历冰冻集合for i in info: print(i)#集合推导式(无法得到冰冻集合,可以得到集合,列表,元组,字典类型)result = { i for i in info}print(result,type(result))#函数#冰冻集合可以使用集合的函数(不修改集合本身的函数都可以使用)info = frozenset(('xuexi','gongzuo','kaoyan','xiuxi'))#copy()result = info.copy()print(result)#集合操作 交集,并集,差集,对称差集等 不修改冰冻集合本身就能使用:冰冻集合的操作结果都是冰冻集合info = frozenset(('xuexi','gongzuo','kaoyan','xiuxi'))info2 = { 'xuexi','gongzuo','kaoyan','xiuxi'}#冰冻集合操作result = info.union(info2)print(result)#普通集合操作(冰冻集合是参考集合)result = info2.union(info)print(result)
转载地址:https://cpython.blog.csdn.net/article/details/112777105 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月18日 23时50分19秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java程序员从笨鸟到菜鸟之(八)反射和代理机制
2019-04-30
面试心得与总结—BAT、网易、蘑菇街
2019-04-30
Java对象初始化顺序
2019-04-30
Java开发的几个注意点
2019-04-30
我的Java后端书架 (2016年暖冬4.0版)
2019-04-30
每个程序员都必读的10篇文章
2019-04-30
也谈IO模型
2019-04-30
谈谈互联网后端基础设施
2019-04-30
Mybatis的ResultMap的使用
2019-04-30
Java 异常处理的误区和经验总结
2019-04-30
Chrome控制台使用详解
2019-04-30
Chrome 控制台console的用法(学了之后对于调试js可是大大有用的哦)
2019-04-30
15 个必须知道的 Chrome 开发工具技巧
2019-04-30
推荐的四款产品原型设计工具
2019-04-30
Spring基础知识汇总 Java开发必看
2019-04-30
设计模式(一)工厂模式Factory(创建型)
2019-04-30