Python内置数据类型中的集合详解


Posted in Python onMarch 18, 2022
目录

1. 集合 set 简介

集合的最大特征是其每个元素都是唯一的,它可以删除、可以增加、也可以通过增删实现替换元素,但是它是没有下标的,你无法通过下标或者切片功能访问集合。因为集合就像一个袋子里面装着颜色不一样的玻璃球,你可以替换玻璃球,但是无法指定玻璃球存放的地点。

它最大的作用,就是它元素的唯一,它经常被用来清除多余的数据。

1.1 使用 { } 直接创建集合

可以使用 {} 直接创建集合,但是不能使用 {} 创建空集合,因为 {} 被用来创建空字典。你只能通过 set() 来创建空集合。

1.2 使用 set() 函数创建集合

使用内置函数 set,可以快速的将其他类型的可迭代对象转换成 集合 对象。这些可迭代对象,可以是字符串、列表、元组等等。

print("创建一个空集合")
print(set())
str1 = 'ABCDEF!'
s=set(str1)
print("*"*40)
print("一个由字符串转换的集合,每个元素即唯一的单独字符")
print(s)
list1 = [0,1,2,3,4,3,2,1]
s=set(list1)
print("*"*40)
print("一个由列表转换的集合,但是在列表中重复的元素只会出现一次")
print(s)

2. 集合没有切片功能!

请仔细理解,集合没有切片功能,这意味着什么,这意味着无法对它排序(当然可以转换成列表再排序),意味着无法用 while 循环配合下标依次获得元素,你可以用 for 循环获取。

3. 处理集合的常见内置函数

3.1  len 函数

len 函数返回集合的长度,即元素的个数。

3.2  map 函数

map 函数对集合中的每个元素进行相同的操作,然后返回一个 map 对象,再使用 set 函数可以得到集合

>>> a
{'sdf', 'er'}
>>> set(map(lambda x:x+"-",a))
{'er-', 'sdf-'}

3.3  filter 函数

filter 函数对集合中的每个元素进行相同的操作,符合条件的元素才留下来,返回一个 filter 类型的对象。

>>> a
{'sdf', 'er'}
>>> set(filter(lambda x:len(x)==2,a))
{'er'}

3.4  reduce 函数

filter 函数依次对集合中的元素进行相同的迭代操作最后得到一个对象。

>>> import functools
>>> a
{'sdf', 'er'}
>>> functools.reduce(lambda x,y:x+"~"+y,a)
'sdf~er'

3.5  sum 函数

sum 函数,只对元素是数值的集合有效,返回列表中的元素总和,如果元素类型不是数值,则返回 TypeError。

3.6  max 函数

max 函数,返回集合中的元素最大值。

3.7  min 函数

min 函数,返回集合中的元素最小值。

>>> a={1,2,3}
>>> sum(a)
6
>>> min(a)
1
>>> max(a)
3
>>>

3.8  sorted 函数

sorted 函数会对集合按照指定方式进行排序,请注意,使用 sorted 函数会得到一个排好序的列表,不是集合!!!原集合不会改变。

list1 = [0,1,2,3,4,3,2,1]
s=set(list1)
s1=sorted(s)
print(s1)
print(type(s1))

Python内置数据类型中的集合详解

3.9 enumerate 函数

enumerate 函数可以将一个集合依次取出。

3.10 any 函数

any() 函数用于判断给定的集合的所有元素是否都为 False,则返回 False,如果有一个为 True,则返回 True。

3.11 all 函数

all() 函数用于判断给定的集合的所有元素是否都为 TRUE,如果是返回 True,否则返回 False。

4. 集合的内置方法

4.1  .add(val) 

.add(val) 方法附加一个元素 val,如果 val 已经在集合中,那么原来的集合不变化。

4.2  .clear() 

.clear() 方法将集合清空。 

4.3  .copy()

.copy() 方法将返回集合的拷贝(而不是和原来的列表共用同一个地址)。 

4.4  .difference(set1,set2,...)

difference() 方法用于返回集合的差集,即返回的集合元素包含在第一个集合中,但不包含在第二、三、N个集合(方法的参数)中。

4.5  .difference_update(set1,set2,...)

difference_update() 方法用于移除两个或者多个集合中都存在的元素。

difference_update() 方法与 difference() 方法的区别在于 difference() 方法返回一个移除相同元素的新集合,而 difference_update() 方法是直接在原来的集合中移除元素,没有返回值。

# 集合的使用
a={1,2,3,4,1}
b={4,5,6,7}
# 1.集合是不会有重复的元素的
print("1. ",a)
# 2.集合使用 add 方法加一个元素
a.add("6")
print("2. ",a)
# 3.集合使用 clear 方法清空
a.clear()
print("3. ",a)
a={1,2,3,4}
# 4.集合使用 copy 方法复制数据
c=a.copy()
print("4. ",c)
# 5.集合使用 difference 方法返回
#   和其他集合不一样的数据
print("5. ",a.difference(b))
# 6.集合使用 difference_update 方法删除
#   和其他集合一样的数据
# a={1,2,3,4}
# b={4,5,6,7}
a={1,2,3,4}
b={4,5,6,7}
print("6. ",a.difference_update(b))
print("6. ",a)
a={1,2,3,4}
c={1}
a.difference_update(b,c)
print("6. ",a)
# 7.集合使用 discard 方法删掉数据 val
a={1,2,3,4}
a.discard(2)
print("7. ",a)

Python内置数据类型中的集合详解

4.6  .discard(val)

.discard 方法删除集合中指定的元素。

4.7  .intersection(set1,set2,...)

.intersection 方法返回集合的交集,自身不受影响。

4.8  .intersection_update()

.intersection 方法原地改变自身为两个或者多个集合的交集。

>>> a={1,2,3,4,5}
>>> b={2,3,4,5,6,7}
>>> a.intersection(b)
{2, 3, 4, 5}
>>> a
{1, 2, 3, 4, 5}
>>> b
{2, 3, 4, 5, 6, 7}
>>> a.intersection_update(b)
>>> a
{2, 3, 4, 5}
>>> b
{2, 3, 4, 5, 6, 7}

4.9  .isdisjoint()

.isdisjoint 方法判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。

>>> a={1,2,3,4,5}
>>> b={2,3,4,5,6,7}
>>> c={"a","b"}
>>> a.isdisjoint(b)
False
>>> a.isdisjoint(c)
True

4.10 .issubset(other_set)

.issubset 方法判断自身集合是否为该方法参数集合 other_set 的子集。

>>> a={1,2,3,4,5}
>>> b={2,3,4,5,6,7}
>>> c={1}
>>> a.issubset(b)
False
>>> a.issubset(c)
False
>>> c.issubset(a)
True

4.11 .issuperset(other_set)

.issuperset 方法判断该方法参数集合 other_set 是否为自身集合的子集。

>>> a={1,2,3,4,5}
>>> b={2,3,4,5,6,7}
>>> c={1}
>>> a.issuperset(b)
False
>>> a.issuperset(c)
True

4.12 .pop()

.pop() 方法将返回集合中的一个元素,原集合将删除该元素。

请注意,集合中的 pop 方法是没有 index 参数!如果像使用列表中的 pop 方法输入 index 参数,则返回 TypeError: pop() takes no arguments (1 given) 错误。

4.13 .remove()

.remove(val) 方法将删除集合中的 val 元素,返回为空。如果 val 不在集合中,则返回 KeyError 错误。

4.14 .symmetric_difference()

返回两个集合中不重复的元素集合,而不改变自身集合。

4.15 .symmetric_difference_update()

移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。

# 10.集合使用 ^ 操作符返回
#   两个集合中不一样的数据
# 等同于 symmetric_difference方法
a={1,2,3,4}
b={4,5,6,7}
tmp=a^b
print("10. ",tmp) 
print("a==>",a)
print("b==>",b)
print("使用 ^ 操作符 原来的集合不受影响")
print("*"*60)
print("a.symmetric_difference(b)==>",a.symmetric_difference(b))
print("a==>",a)
print("b==>",b)
print("使用 symmetric_difference方法 原来的集合不受影响")
print("*"*60)
print("a.symmetric_difference_update(b)==>",a.symmetric_difference_update(b))
print("使用 symmetric_difference_update 原来的集合会改变")
print("a==>",a)
print("b==>",b)
print("*"*60)

Python内置数据类型中的集合详解

4.16 .union(other_set)

.union 方法返回两个集合的并集,而不改变自身集合。

4.17 .update(other_set)

.update 方法给自身集合集合添加元素。

>>> a={0,1}
>>> b={3,4}
>>> c={5,6}
>>> a.union(b)
{0, 1, 3, 4}
>>> a
{0, 1}
>>> b
{3, 4}
>>> a.update(b)
>>> a
{0, 1, 3, 4}
>>> b
{3, 4}

5. 集合和运算符

5.1 - 运算符

a 、b 是两个集合;a - b类似于 a.difference(b) 方法,即返回集合a中包含而集合b中不包含的元素,自身不受改变。

>>> a={0,1,2,3}
>>> b={2,3,4,5}
>>> a-b
{0, 1}
>>> a.difference(b)
{0, 1}

5.2 | 运算符

a 、b 是两个集合;a | b类似于 a.union(b) 方法,即返回集合a和b中所有的元素,自身不受改变。

>>> a={0,1,2,3}
>>> b={2,3,4,5}
>>> a|b
{0, 1, 2, 3, 4, 5}
>>> a.union(b)
{0, 1, 2, 3, 4, 5}

5.3 & 运算符

a 、b 是两个集合;a & b类似于 a.intersection(b) 方法,即返回集合a和b中都包含了的元素,自身不受改变。

# 9.集合使用 & 选出集合重叠的部分
#   等同于 insection 方法
a={1,2,3,4}
b={4,5,6,7}
print("*********  初始数据  ***********")
print("a==>",a)
print("b==>",b)
print("8. a & b==>",a & b)
print("执行 a & b 后")
print("a==>",a)
print("b==>",b)
print("使用 & 操作符 原来的集合不受影响")
print("*"*60)
print("8. a.intersection(b)==>",a.intersection(b))
print("使用 intersection 方法 原来的集合不受影响")
print("a==>",a)
print("b==>",b)
print("*"*60)
print("8. a.intersection_update(b)==>",a.intersection_update(b))
print("使用 intersection_update 方法 原来的集合会改变")
print("a==>",a)
print("b==>",b)
print("*"*60)

Python内置数据类型中的集合详解

5.4 ^ 运算符

a 、b 是两个集合;a ^ b类似于 a.symmetric_difference(b) 方法,即返回不同时包含于a和b的元素,自身不受改变。

>>> a={0,1,2,3}
>>> b={2,3,4,5}
>>> a.symmetric_difference(b)
{0, 1, 4, 5}
>>> a^b
{0, 1, 4, 5}

5.5 in 、not in 运算符

in 运算符判断某个元素属于某个集合

not in 运算符判断某个元素不属于某个集合

>>> a={0,1,2,3}
>>> 0 in a
True
>>> "0" in a
False

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注三水点靠木的更多内容! 

Python 相关文章推荐
python实现简单的计时器功能函数
Mar 14 Python
Odoo中如何生成唯一不重复的序列号详解
Feb 10 Python
浅谈DataFrame和SparkSql取值误区
Jun 09 Python
python实现C4.5决策树算法
Aug 29 Python
python实现多进程代码示例
Oct 31 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
Feb 13 Python
python+opencv实现摄像头调用的方法
Jun 22 Python
Python 实现大整数乘法算法的示例代码
Sep 17 Python
Django中modelform组件实例用法总结
Feb 10 Python
Django表单提交后实现获取相同name的不同value值
May 14 Python
Python使用Chrome插件实现爬虫过程图解
Jun 09 Python
Python Pandas解析读写 CSV 文件
Apr 11 Python
Python集合set()使用的方法详解
Mar 18 #Python
基于Python实现流星雨效果的绘制
Python中with上下文管理协议的作用及用法
Mar 18 #Python
python 判断文件或文件夹是否存在
Mar 18 #Python
分享Python获取本机IP地址的几种方法
Mar 17 #Python
使用python求解迷宫问题的三种实现方法
Python超详细分步解析随机漫步
You might like
php zend 相对路径问题
2009/01/12 PHP
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
2014/11/04 PHP
php目录遍历函数opendir用法实例
2014/11/20 PHP
php检查是否是ajax请求的方法
2015/04/16 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
php执行多个存储过程的方法【基于thinkPHP】
2016/11/08 PHP
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
javascript实现点击商品列表checkbox实时统计金额的方法
2015/05/15 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
jquery实现的淡入淡出下拉菜单效果
2015/08/25 Javascript
深入浅析JavaScript函数前面的加号和叹号
2016/07/09 Javascript
jQuery实现图片轮播效果代码
2016/09/27 Javascript
关于RequireJS的简单介绍即使用方法
2016/10/20 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
12个非常有用的JavaScript技巧
2017/05/17 Javascript
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
2018/01/08 Javascript
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
Promise.all中对于reject的处理方法
2018/08/01 Javascript
JQuery实现折叠式菜单的详细代码
2020/06/03 jQuery
python读文件逐行处理的示例代码分享
2013/12/27 Python
使用python调用浏览器并打开一个网址的例子
2014/06/05 Python
Windows系统配置python脚本开机启动的3种方法分享
2015/03/10 Python
Python异常对代码运行性能的影响实例解析
2018/02/08 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
2018/07/26 Python
对python 自定义协议的方法详解
2019/02/13 Python
Django 开发环境配置过程详解
2019/07/18 Python
python中dict()的高级用法实现
2019/11/13 Python
Python递归调用实现数字累加的代码
2020/02/25 Python
python用opencv完成图像分割并进行目标物的提取
2020/05/25 Python
泰国汽车、火车和轮渡票预订网站:Bus Online Ticket
2017/09/09 全球购物
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
数控专业毕业生求职信范文
2013/09/21 职场文书
校园安全标语
2014/06/07 职场文书
公司行政专员岗位职责
2014/08/24 职场文书
php引用传递
2021/04/01 PHP