Python笔记·第六章——集合 (set) 的增删改查及 copy()方法
简介:
集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:
1、去重,把一个列表变成集合,就自动去重了。
2、关系测试,测试两组数据之前的交集、差集、并集等关系。
一、集合的创建
set1 = set({,,,,})
set2 = {,,,,}
set3 = set('abc')
print(set1,set2,set3) #{, , , , } {, , , , } {'c', 'b', 'a'}
二、添加集合元素的方法
▷add( )方法:
此方法是用来往集合里添加单个元素,如果已存在,则不会添加。
set1 = {,,,,}
set1.add()
print(set1)
set1.add()
print(set1)
▷update( )方法:
此方法是用来迭代的往集合里添加元素
set1 = {1,2,3,4,5}
set1.update('') #不能直接添加数字类型,因为数字类型不可迭代
print(set1) # {1, 2, 3, 4, 5, '6'}
set1.update('abc')
print(set1) #{1, 2, 3, 4, 5, 'c', 'a', '6', 'b'}
set1.update([1,7,8,9])
print(set1) #{1, 2, 3, 4, 5, 'b', 7, 8, 9, 'a', 'c', '6'}
三、删除集合元素的方法
set1 = {1,2,3,4,5}
set1.pop() #随机删除一个元素,将元素值返回
set1.remove('') #指定删除一个元素,找不到就会报错
set1.clear() #清空整个集合
del set1 #删除整个集合
四、查询集合元素的方法
由于集合是无序的又没有索引,所以查询集合元素只有一种,那就是循环,如下:
set1 = {1,2,3,4,5}
for s in set1:
print(s)
#结果如下:
#
#
#
#
#
五、集合的交集、并集等
set1 = {1,2,3,7,8}
set2 = {2,3,6,9}
print(set1&set2) #交集{2, 3}
print(set1|set2) #并集{1, 2, 3, 6, 7, 8, 9}
print(set1^set2) #反交集{1, 6, 7, 8, 9}
print(set1-set2) #差集{8, 1, 7} 独有的
print(set2-set1) #差集{9, 6} 独有的
set1 = {1,2,3} #set1为set2的子集
set2 = {1,2,3,4,5} #set2为set1的超集
13 print(set1 < set2) #判断一个集合是否为另一个集合的子集,用' < '判断 如果是,返回:True
六、frozenset( )不可变集合(无法添加无法修改)
set1 = {1,2,3,4,5}
set2 = frozenset(set1)
print(set2,type(set2))
#结果为:frozenset({1, 2, 3, 4, 5}) <class 'frozenset'>
#创建方法如下:
set3 = frozenset({1,2,3})
print(set3) # frozenset({1, 2, 3})
set4 = frozenset('abc') #迭代添加
print(set4) # frozenset({'a', 'b', 'c'})
七、copy( )与 deepcopy()
这两种方法用于复制一个变量然后赋值给另一个变量。
copy( )----浅复制
简单来讲,用此方法复制后的变量与原变量对应的内存地址是不一样的,修改它第一层的元素,另一个变量不会被修改
但是如果他们有嵌套(如列表里嵌套列表),那么第二层嵌套的列表与另一个变量所对应的列表的地址就是一个内存地址了,
这个时候,如果修改第二层的元素,则另一个变量也会被修改
▷用法:
a = ['a','b','c']
b = a.copy()
print(b)
#结果为:['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]
但是,如果我们要修改一个列表的第二层元素的话,另一个列表就会被修改了,如下:
li1 = [1,2,[3,4],5]
li2 = li1.copy()
print(li1 is li2) #False li2[2][0] = 0 #更改li2第二层的值,li1就会被修改
print(li1) #[1, 2, [0, 4], 5]
deepcopy( )----深复制
简单来讲,用此方法复制后的变量与原变量对应的内存地址是不一样的,不管有没有嵌套,修改它第一层的元素,另一个变量不会被修改
但是用这个方法之前,必须得导入copy包,如下:
import copy
li1 = [1,2,[3,4],5]
li2 = copy.deepcopy(li1)
print(li1 is li2) #False li2[2][0] = 0 #更改li2第二层的值,li1也不会被修改
print(li1) #[1, 2, [3, 4], 5]
八、如何将一个列表里的重复元素去掉
▷思路:将列表转换为集合,它会自动去重,然后再将集合转换为列表即可
▷代码:如下:
li1 = [1,2,3,2,1,5,6,7,6,5,8]
set1 = set(li1)
li1 = list(set1)
print(li1) #结果为:[1, 2, 3, 5, 6, 7, 8]
Python笔记·第六章——集合 (set) 的增删改查及 copy()方法的更多相关文章
- Python笔记·第六章——字典 (dict) 的增删改查及其他方法
字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可 ...
- 集合 (set) 的增删改查及 copy()方法
一.集合 1.集合的创建 set1 = set({1,2,'barry'}) set2 = {1,2,'barry'} print(set1,type(set1)) print(set2,type(s ...
- Python笔记·第五章—— 列表(List) 的增删改查及其他方法
一.列表的简介 列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[ ]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如:li = ...
- Mysql学习笔记(三)对表数据的增删改查。
正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...
- 【转载】salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建
salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建 VisualForce封装了很多的标签用来进行页面设计,本篇主要讲述简单的页面增删改查.使用的内容和设计到前台页面使用的 ...
- python 全栈开发,Day124(MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器,"$"的奇妙用法,Array Object 的特殊操作,选取跳过排序,客户端操作)
一.MongoDB初识 什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介 ...
- nodejs笔记五--MongoDB基本环境配置及增删改查;
一.基本环境配置: 1,首先到官网(http://www.mongodb.org/downloads )下载合适的安装包,然后一步一步next安装,当然可以自己更改安装目录:安装完成之后,配置环境变量 ...
- python 调用zabbix api接口实现主机的增删改查
python程序调用zabbix系统的api接口实现对zabbix_server端主机的增删改查,使用相关功能时候,需要打开脚本中的相关函数. 函数说明: zabbixtools() 调用zabbi ...
- 【EF6学习笔记】(二)操练 CRUD 增删改查
本篇原文链接: Implementing Basic CRUD Functionality 说明:学习笔记参考原文中的流程,为了增加实际操作性,并能够深入理解,部分地方根据实际情况做了一些调整:并且根 ...
随机推荐
- Linux中包管理与定时任务
第1章 软件查询 1.1 查询软件是否安装 rpm -qa |grep cron 查询是否安装了这个软件. [root@znix ~]# rpm -qa |grep cron crontabs-1.1 ...
- HTML学习笔记 基础标签及css引用案例 第一节 (原创)参考使用表
<!DOCTYPE html><!--头文件 不是标签 也没有结束,这是声明该文件为HTML5--><html lang="en"><!- ...
- .Net开发小技巧
.NET项目开发中的小技巧 1.不要频繁的创建对象...这个损失是巨大的...new太多了,后果比较严重. 2.打开数据库后要及时的关闭连接,如果你不能做到一个open后跟一个close,那也没关系, ...
- C#删除区域实现透明
最近在搞一个图形图像的项目.不知道经理为什么选择了C#语言,但还是要做,呵呵. 在期间出现一个比较难解决的问题如下: 删除当前图层的指定区域用来显示下面图层在这个区域的图像,相当于PS蒙版层的效果. ...
- C#中消息的工作流程
C#中的消息被Application类从应用程序消息队列中取出,然后分发到消息对应的窗体,窗体对象的第一个响应函数是对象中的protected override void WndProc(ref Sy ...
- web前端vertical-align的作用及对象详解
很多程序员知道web前端技术里的vertical-align是什么意思,但是对于vertical-align到底以什么为对齐标准却一知半解,今天我们就来说说web前端vertical-align. 1 ...
- OpenTSDB-Writing Data
Writing Data You may want to jump right in and start throwing data into your TSD, but to really take ...
- Xshell 的安装教程
Xshell就是一个远程控制RHEL的软件:其他的还有很多,用什么都无所谓(根据公司情况). 下面我们来安装下这个工具: 双击exe 点下一步: 选 免费的 然后下一步:(免费的功能足够用了) 点接受 ...
- 移动应用开发者最应该知道的8款SDK
2017年双11全球狂欢节结束后,据大数据公司统计显示,2017年双11全网销售额达2539.7亿,移动端销售占比91.2%.不难看出,智能手机因随身携带.时刻在线等特点,已取代PC,成为网络生活新的 ...
- LKD: Chapter 9 An Introduction to Kernel Synchronization
This chapter introduces some conception about kernel synchronization generally. Critical Regions: Co ...