python 集合操作方法详解
说集合之前,我们先说一个小例子,假设某公司有五个人喜欢打篮球,五个人喜欢打游戏,问即打游戏有打篮球
的人都有哪些?
- 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&nums2
- print(a)
- #并的方式二:intersaction
- b = 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|nums2
- print(a)
- #并的方式二:uniom
- b = 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-nums2
- print(a1)
- a2 = nums2-nums1
- print(a2)
- #差的方式二:difference
- b1 = 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^nums2
- print(a1)
- #对称差集表示方法二:symmetric_difference
- a2 = 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 info
- print(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)
字符串操作方法详解,请看下面博客:http://www.cnblogs.com/wj-1314/p/8419009.html
字典操作方法详解,请看下面博客:http://www.cnblogs.com/wj-1314/p/8421724.html
列表操作方法详解,请看下面博客:http://www.cnblogs.com/wj-1314/p/8433116.html
python 集合操作方法详解的更多相关文章
- python集合操作方法详解
前言 说集合之前,我们先说一个小例子,假设某公司有五个人喜欢打篮球,五个人喜欢打游戏,问即打游戏有打篮球的人都有哪些? play_basketball = ['a','b','c','d','e'] ...
- python 字符串操作方法详解
字符串序列用于表示和存储文本,python中字符串是不可变对象.字符串是一个有序的字符的集合,用于存储和表示基本的文本信息,一对单,双或三引号中间包含的内容称之为字符串.其中三引号可以由多行组成,编写 ...
- python 字典操作方法详解
字典是一种通过名字或者关键字引用的得数据结构,key 类型需要时被哈希,其键可以是数字.字符串.元组,这种结构类型也称之为映射.字典类型是Python中唯一內建的映射类型. 注意,浮点数比较很不精确, ...
- python 列表操作方法详解
列表是Python中最基本的数据结构,列表是最常用的Python数据类型,列表是一个数据的集合,集合内可以放任何数据类型,可对集合方便的增删改查操作.Python已经内置确定序列的长度以及确定最大和最 ...
- python字符串操作方法详解
字符串 字符串序列用于表示和存储文本,python中字符串是不可变对象.字符串是一个有序的字符的集合,用于存储和表示基本的文本信息,一对单,双或三引号中间包含的内容称之为字符串.其中三引号可以由多 ...
- python列表操作方法详解
列表 列表是Python中最基本的数据结构,列表是最常用的Python数据类型,列表是一个数据的集合,集合内可以放任何数据类型,可对集合方便的增删改查操作.Python已经内置确定序列的长度以及确 ...
- python字典操作方法详解
前言 字典是一种通过名字或者关键字引用的得数据结构,key 类型需要时被哈希,其键可以是数字.字符串.元组,这种结构类型也称之为映射.字典类型是Python中唯一內建的映射类型. 注意,浮点数比较很不 ...
- Python 列表(List)操作方法详解
Python 列表(List)操作方法详解 这篇文章主要介绍了Python中列表(List)的详解操作方法,包含创建.访问.更新.删除.其它操作等,需要的朋友可以参考下 列表是Python中最基本 ...
- Python 字符串方法详解
Python 字符串方法详解 本文最初发表于赖勇浩(恋花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙转载,敬请保留全文完整,切勿去除本声明和作者信息. ...
随机推荐
- Vue 环境搭建之Hello World
建 目录 webpack-vuedemo1 安装依赖组件 : 初始化 npm init npm install --save vue npm install --save-dev babel-core ...
- MongoDB建立主从复制小案例(一主一从)
花了两天学习了mongoDB, 今天接触到了mongo的主从配置, 把它记下来 1. 开启两个mongo服务器(用于一主一从, 没有加安全验证相关参数 : 可以使用mongd-help查看) mong ...
- 【Java学习笔记之二十】final关键字在Java继承中的用法小结
谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法. ...
- BZOJ 1192: [HNOI2006]鬼谷子的钱袋(新生必做的水题)
1192: [HNOI2006]鬼谷子的钱袋 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3557 Solved: 2596[Submit][St ...
- 在vue-cli项目中使用echarts
这个示例使用 vue-cli 脚手架搭建 安装echarts依赖 npm install echarts -S 或者使用国内的淘宝镜像: 安装 npm install -g cnpm --regist ...
- 无序列表li横向排列的间隙问题
今天在写页面的时候,无意中遇到这样一个问题,就是无序列表li横向排列即做成导航栏时,列表项间有间隙. 如: 将列表项li变成列表块后(即将li标签设置为,display:inline-block后), ...
- 【深度学习系列】CNN模型的可视化
前面几篇文章讲到了卷积神经网络CNN,但是对于它在每一层提取到的特征以及训练的过程可能还是不太明白,所以这节主要通过模型的可视化来神经网络在每一层中是如何训练的.我们知道,神经网络本身包含了一系列特征 ...
- Java Web学习路线图
三张Java Web完整学习路线图,阶段一和JavaSE部分可不学
- The most interesting feature of iPhone X - FaceID
No doubt everybody knows that iPhone 8 & iPhone X appear on the market. A feature called FaceID ...
- API接口安全性设计
http://www.jianshu.com/p/c6518a8f4040 接口的安全性主要围绕Token.Timestamp和Sign三个机制展开设计,保证接口的数据不会被篡改和重复调用,下面具体来 ...