集合 (set) 的增删改查及 copy()方法
时间:2022-05-08
本文章向大家介绍集合 (set) 的增删改查及 copy()方法,主要内容包括简介:、一、集合的创建、二、添加集合元素的方法、三、删除集合元素的方法、四、查询集合元素的方法、五、集合的交集、并集等、六、frozenset( )不可变集合(无法添加无法修改)、七、copy( )与 deepcopy()、八、如何将一个列表里的重复元素去掉、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
简介:
集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:
1、去重,把一个列表变成集合,就自动去重了。
2、关系测试,测试两组数据之前的交集、差集、并集等关系。
一、集合的创建
1 set1 = set({1,2,3,4,5})
2 set2 = {1,2,3,4,5}
3 set3 = set('abc')
4 print(set1,set2,set3) #{1, 2, 3, 4, 5} {1, 2, 3, 4, 5} {'c', 'b', 'a'}
二、添加集合元素的方法
▷add( )方法:
此方法是用来往集合里添加单个元素,如果已存在,则不会添加。
1 set1 = {1,2,3,4,5}
2 set1.add(6)
3 print(set1)
4 set1.add(1)
5 print(set1)
▷update( )方法:
此方法是用来迭代的往集合里添加元素
1 set1 = {1,2,3,4,5}
2 set1.update('6') #不能直接添加数字类型,因为数字类型不可迭代
3 print(set1) # {1, 2, 3, 4, 5, '6'}
4
5 set1.update('abc')
6 print(set1) #{1, 2, 3, 4, 5, 'c', 'a', '6', 'b'}
7
8 set1.update([1,7,8,9])
9 print(set1) #{1, 2, 3, 4, 5, 'b', 7, 8, 9, 'a', 'c', '6'}
三、删除集合元素的方法
1 set1 = {1,2,3,4,5}
2 set1.pop() #随机删除一个元素,将元素值返回
3
4 set1.remove('2') #指定删除一个元素,找不到就会报错
5
6 set1.clear() #清空整个集合
7
8 del set1 #删除整个集合
四、查询集合元素的方法
由于集合是无序的又没有索引,所以查询集合元素只有一种,那就是循环,如下:
1 set1 = {1,2,3,4,5}
2 for s in set1:
3 print(s)
4 #结果如下:
5 # 1
6 # 2
7 # 3
8 # 4
9 # 5
五、集合的交集、并集等
1 set1 = {1,2,3,7,8}
2 set2 = {2,3,6,9}
3
4 print(set1&set2) #交集{2, 3}
5 print(set1|set2) #并集{1, 2, 3, 6, 7, 8, 9}
6 print(set1^set2) #反交集{1, 6, 7, 8, 9}
7 print(set1-set2) #差集{8, 1, 7} 独有的
8 print(set2-set1) #差集{9, 6} 独有的
9
10
11 set1 = {1,2,3} #set1为set2的子集
12 set2 = {1,2,3,4,5} #set2为set1的超集
13 print(set1 < set2) #判断一个集合是否为另一个集合的子集,用' < '判断 如果是,返回:True
六、frozenset( )不可变集合(无法添加无法修改)
1 set1 = {1,2,3,4,5}
2 set2 = frozenset(set1)
3 print(set2,type(set2))
4 #结果为:frozenset({1, 2, 3, 4, 5}) <class 'frozenset'>
5
6 #创建方法如下:
7 set3 = frozenset({1,2,3})
8 print(set3) # frozenset({1, 2, 3})
9
10 set4 = frozenset('abc') #迭代添加
11 print(set4) # frozenset({'a', 'b', 'c'})
七、copy( )与 deepcopy()
这两种方法用于复制一个变量然后赋值给另一个变量。
copy( )----浅复制
简单来讲,用此方法复制后的变量与原变量对应的内存地址是不一样的,修改它第一层的元素,另一个变量不会被修改
但是如果他们有嵌套(如列表里嵌套列表),那么第二层嵌套的列表与另一个变量所对应的列表的地址就是一个内存地址了,
这个时候,如果修改第二层的元素,则另一个变量也会被修改
▷用法:
1 a = ['a','b','c']
2 b = a.copy()
3 print(b)
4 #结果为:['a', 'b', 'c']
▷复制之后两个变量所对应的内存地址的问题:
先看赋值运算:
此时两个内存地址是一样的,更改一个列表的值,另一个也会被修改:如下:
li1 = [1,2,[3,4],5]
li2 = li1
print(li1 is li2) # True
li2[0] = 0 #更改li2的值,li1也会被修改
print(li1) #结果:[0, 2, [3, 4], 5]
再看看copy方法:
此时他们的内存地是不同的,更改一个列表的第一层元素的值,另一个不会被更改,如下:
li1 = [1,2,[3,4],5]
li2 = li1.copy()
print(li1 is li2) #False
li2[0] = 0 #更改li2第一层的值,li1不会被修改
print(li1) #[1, 2, [3, 4], 5]
但是,如果我们要修改一个列表的第二层元素的话,另一个列表就会被修改了,如下:
1 li1 = [1,2,[3,4],5]
2 li2 = li1.copy()
3 print(li1 is li2) #False
4
5 li2[2][0] = 0 #更改li2第二层的值,li1就会被修改
6 print(li1) #[1, 2, [0, 4], 5]
deepcopy( )----深复制
简单来讲,用此方法复制后的变量与原变量对应的内存地址是不一样的,不管有没有嵌套,修改它第一层的元素,另一个变量不会被修改
但是用这个方法之前,必须得导入copy包,如下:
1 import copy
2 li1 = [1,2,[3,4],5]
3 li2 = copy.deepcopy(li1)
4 print(li1 is li2) #False
5
6 li2[2][0] = 0 #更改li2第二层的值,li1也不会被修改
7 print(li1) #[1, 2, [3, 4], 5]
八、如何将一个列表里的重复元素去掉
▷思路:将列表转换为集合,它会自动去重,然后再将集合转换为列表即可
▷代码:如下:
1 li1 = [1,2,3,2,1,5,6,7,6,5,8]
2 set1 = set(li1)
3 li1 = list(set1)
4 print(li1) #结果为:[1, 2, 3, 5, 6, 7, 8]
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android 天气APP(十八)常用城市
- Android 蓝牙开发(扫描设备、绑定、解绑)
- Python 微信机器人:调用电脑摄像头时时监控功能实现演示,调用电脑摄像头进行拍照并保存。
- Android 天气APP(十九)更换新版API接口(更高、更快、更强)
- Android 天气APP(二十)增加欢迎页及白屏黑屏处理、展示世界国家/地区的城市数据
- Android 天气APP(二十二)改动些许UI、增加更多空气质量数据和生活建议数据展示
- Android 自定义View 之 RectF用法详解
- Android 天气APP(二十五)地图天气(下)嵌套滑动布局渲染天气数据
- Android 天气APP(二十六)增加自动更新(检查版本、通知栏下载、自动安装)
- Android 天气APP(二十七)增加地图天气的逐小时天气、太阳和月亮数据
- Android 天气APP(二十八)地图搜索定位
- DevEco Studio项目构建讲解、编写页面、布局介绍、页面跳转
- Android 天气APP(二十九)壁纸设置、图片查看、图片保存
- Chrome 私人珍藏-stylus插件实现个性化百度界面定制
- Python 基础篇-简单的异常捕获