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 说明:学习笔记参考原文中的流程,为了增加实际操作性,并能够深入理解,部分地方根据实际情况做了一些调整:并且根 ...
随机推荐
- Spring AOP分析(2) -- JdkDynamicAopProxy实现AOP
上文介绍了代理类是由默认AOP代理工厂DefaultAopProxyFactory中createAopProxy方法产生的.如果代理对象是接口类型,则生成JdkDynamicAopProxy代理:否则 ...
- CentOS6软raid配置与管理
事先添加硬盘设备sdb.sdc.sdd.sde.无论是物理硬盘还是虚拟硬盘,最好使用同型号同大小的硬盘. 创建raid设备 支持raid0.1.4.5.6级别 # mdadm -C /dev/md0 ...
- JavaSE高级1
内部类 内部类概念: 所谓内部类(Inner Class),顾名思义,就是将一个类定义在另一个类的内部.内部的类称之为内部类. 内部类的主要特点: 内部类可以很好的实现隐藏,可以使用protected ...
- 算法:javascript截取字符串
题目: Given a string, find the length of the longest substring without repeating characters. Examples: ...
- JavaScript系列----作用域链和闭包
1.作用域链 1.1.什么是作用域 谈起作用域链,我们就不得不从作用域开始谈起.因为所谓的作用域链就是由多个作用域组成的.那么, 什么是作用域呢? 1.1.1作用域是一个函数在执行时期的执行环境. 每 ...
- 学习RocketMQ (一) 安装并且启动MQ
1.使用RocketMQ 的 软件要求 64bit OS, Linux/Unix/Mac is recommended;64bit JDK 1.8+;Maven 3.2.xGit 1)安装Linux ...
- Vim常用操作-Nginx配置文件批量加注释。
刚接触 Vim 会觉得它的学习曲线非常陡峭,要记住很多命令.所以这个系列的分享,不会教你怎么配置它,而是教你怎么快速的使用它. 本期我们要实现给 Nginx 配置文件批量注释的功能,先来看效果: 操作 ...
- jquery.tagsinput的使用例子,包括模糊查询后端代码
<link rel="stylesheet" type="text/css" href="~/lib/jquery.tagsinput.jurg ...
- CocoaPods 安装及使用
1.开启 terminal 2.移除现有 Ruby 默认源 $ gem sources --remove https://rubygems.org/ 3.使用新的源 $ gem sources -a ...
- androidStudio 中 gradle 常用功能
1. gradle 使用 svn 当前版本信息. def getSvnRevision() { new ByteArrayOutputStream().withStream { os -> de ...