简介:

集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:

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()方法的更多相关文章

  1. Python笔记·第六章——字典 (dict) 的增删改查及其他方法

    字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可 ...

  2. 集合 (set) 的增删改查及 copy()方法

    一.集合 1.集合的创建 set1 = set({1,2,'barry'}) set2 = {1,2,'barry'} print(set1,type(set1)) print(set2,type(s ...

  3. Python笔记·第五章—— 列表(List) 的增删改查及其他方法

    一.列表的简介   列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[ ]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如:li = ...

  4. Mysql学习笔记(三)对表数据的增删改查。

    正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...

  5. 【转载】salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建

    salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建   VisualForce封装了很多的标签用来进行页面设计,本篇主要讲述简单的页面增删改查.使用的内容和设计到前台页面使用的 ...

  6. python 全栈开发,Day124(MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器,"$"的奇妙用法,Array Object 的特殊操作,选取跳过排序,客户端操作)

    一.MongoDB初识 什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介 ...

  7. nodejs笔记五--MongoDB基本环境配置及增删改查;

    一.基本环境配置: 1,首先到官网(http://www.mongodb.org/downloads )下载合适的安装包,然后一步一步next安装,当然可以自己更改安装目录:安装完成之后,配置环境变量 ...

  8. python 调用zabbix api接口实现主机的增删改查

    python程序调用zabbix系统的api接口实现对zabbix_server端主机的增删改查,使用相关功能时候,需要打开脚本中的相关函数. 函数说明: zabbixtools()  调用zabbi ...

  9. 【EF6学习笔记】(二)操练 CRUD 增删改查

    本篇原文链接: Implementing Basic CRUD Functionality 说明:学习笔记参考原文中的流程,为了增加实际操作性,并能够深入理解,部分地方根据实际情况做了一些调整:并且根 ...

随机推荐

  1. Here We Go(relians) Again

    Here We Go(relians) Again Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...

  2. 深入分析Android动画(一)

    动画的分类: ①View动画 View动画顾名思义其作用对象为View,包含平移.缩放.旋转.透明,这四类变化分别对应着Animation的子类TranlateAnimation.ScaleAnima ...

  3. 深入理解ES6之—set与map

    Set是无重复值的有序列表.Set会自动移除重复的值,因此你可以使用它来过滤数组中重复的值并返回结果. Map是有序的键值对,其中的键允许是任何类型. Set和Map是es6新增的两个数据集合. Se ...

  4. Python 解LeetCode:671. Second Minimum Node In a Binary Tree

    题目在这里,要求一个二叉树的倒数第二个小的值.二叉树的特点是父节点的值会小于子节点的值,父节点要么没有子节点,要不左右孩子节点都有. 分析一下,根据定义,跟节点的值肯定是二叉树中最小的值,剩下的只需要 ...

  5. 三元运算符2>1?true:false;

    1.说明: xxx?xxx:xxx; 第一个'xxx'是写条件语句,条件自己根据需求定 第二个'xxx'是当条件为真时会得到的值 第三个'xxx'是当条件为假时会得到的值 2.例子: 代码: bool ...

  6. Node学习笔记 http

    node url querystring 第二个参数指定分隔符 也可以指定三个参数,效果和两个参数类似 不同于querystring,下面是querystringfy的用法 queryescape与e ...

  7. 【解决方案】纯js动态克隆表一行元素

    1 m = 0 ;// 用于区分input // 新增一条录入 function AddTR(){ m += 1; var tableObject = document.getElementById( ...

  8. 创建简单的Python列表

    比如给出电影列表: The Holy Grail The Life of Brian The Meaning of Life 转换为Python可读的列表,需要遵循以下4个步骤: 1.在数据两边加引号 ...

  9. SQLServer2008数据库连接error40错误

    在连接SQL Server偶尔会遇到报错,如在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为 ...

  10. 《java.util.concurrent 包源码阅读》25 Fork/Join框架之Fork与Work-Stealing(重写23,24)

    在写前面两篇文章23和24的时候自己有很多细节搞得不是很明白,这篇文章把Fork和Work-Stealing相关的源代码重新梳理一下. 首先来看一些线程池定义的成员变量: 关于scanGuard: v ...