首页 > 编程语言 >Python集合 (set) 的增删改查及 copy()方法

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

时间:2023-05-25 17:13:40浏览次数:41  
标签:set set2 Python 改查 集合 set1 li2 print li1

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

以下是集合最重要的两点:

1、去重,把一个列表变成集合,就自动去重了。
2、关系测试,测试两组数据之前的交集、差集、并集等关系。

一、集合的创建

 set1 = set({1,2,3,4,5})
 set2 = {1,2,3,4,5}
 set3 = set('abc')
 print(set1,set2,set3)  #{1, 2, 3, 4, 5} {1, 2, 3, 4, 5} {'c', 'b', 'a'}

二、添加集合元素的方法

add( )方法:

此方法是用来往集合里添加单个元素,如果已存在,则不会添加。

 set1 = {1,2,3,4,5}
 set1.add(6)
 print(set1)
 set1.add(1)
 print(set1)

update( )方法:

此方法是用来迭代的往集合里添加元素

set1 = {1,2,3,4,5}
set1.update('6')  #不能直接添加数字类型,因为数字类型不可迭代
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('2')    #指定删除一个元素,找不到就会报错

set1.clear()        #清空整个集合

del set1            #删除整个集合

四、查询集合元素的方法

由于集合是无序的又没有索引,所以查询集合元素只有一种,那就是循环,如下:

set1 = {1,2,3,4,5}
for s in set1:
    print(s)
#结果如下:
# 1
# 2
# 3
# 4
# 5

五、集合的交集、并集等

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
#Python小白学习交流群:711312441
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]

标签:set,set2,Python,改查,集合,set1,li2,print,li1
From: https://www.cnblogs.com/xxpythonxx/p/17431886.html

相关文章

  • Hello World II - python垂直输出Hello World
    描述垂直输出"HelloWorld",全部代码不超过2行。 输入无输出Hello Worldstr="HelloWorld"fornameinstr[:]:print(name)修改:开始没看到要求不超过两行,正确代码为:fornamein"HelloWorld":print(name)题目来源:python123.io......
  • Python基础之字符编码和文件类型
    字符编码什么事字符编码?什么是字符编码?人类在与计算机交互时,用的都是人类能读懂的字符,如中文字符、英文字符、日文字符等,而计算机只能识别二进制。所以就产生了字符编码'''字符串类型、文本文件的内容都是由字符组成的,但凡涉及到字符的存取,都需要考虑字符编码的问题。字符编......
  • 第一周 python基本语法 笔记
    写在前面的话:由于已经学习了c和c++,所以主要记录了与c/c++不同的地方一:基础知识1:严格缩进,单引号与双引号功能相同2:字符串的序号  字符串的序号可以用两种方式表示  -5-4-3-2-1  我喜欢编程  0  1 2 3 43:使用[]获取字符串的一个或多个字符   索引......
  • Python解数学题
    【Python解决数学问题]用Python解方程】父亲和儿子今年共有60岁,又知4年前,父亲的年龄正好是儿子的3倍,儿子今年是多少岁?1.在Mu下载第三方库2.方程在数学中是什么方程(equation)是指含有未知数的等式。是表示两个数学式(如两个数、函数、量、运算)之间相等关系的一种等式,使等式成立......
  • python基础day11
    文件内指针的移动指针移动总共有三种模式'''f.seek(3,0)f.seek(offset,whence)whence:0:默认的模式,该模式代表指针移动的字节数是以文件开头为参照的(支持tb模式)1:该模式代表指针移动的字节数是以当前所在的位置为参照的(只用于字节模式)2:该模式代表指针移动的字节数是以文件......
  • Python数值类型[转载]
    1.2数值类型从本节开始,我们快速练习Python编程基础,但是由于本教程的定位和篇幅所限,完整的编程基础内容,需要各位读者自行阅读相关书籍和教程。数值类型,说白了就是处理各种各样的数字,Python中的数值类型包括整型、长整型、布尔、双精度浮点、十进制浮点和复数,这些类型在很多方面......
  • python基础11
    文件操作模式1.如果是t模式,read(3)里面的数字代表字符个数2.如果b模式,read(3)里面代表的是字节个数3.一个字节代表一个英文字符4.一个中文字符用三个字节表示withopen('a.txt','r',encoding='utf8')asf:print(f.read(3))文件内指针的移动指针的移动有三种模式1......
  • python中islice()函数使用
    islice是Python中的一个函数,用于对可迭代对象进行切片操作,可以实现类似于切片操作一样的功能,但又不像切片那样需要先将整个序列读入内存,从而节省内存。islice函数是通过生成器来实现对可迭代对象的切片,从而避免了将整个序列读入内存的限制,可以节省大量的内存。使用islice函数需要......
  • Ubuntu 安装 python3.9
    Ubuntu安装python3.9最简单方便的是apt使用第三方的ppa源,然后直接apt安装python3.9安装software-properties-common获取add-apt-repository命令:aptinstall-ysoftware-properties-common添加第三方的ppa源:add-apt-repositoryppa:deadsnakes/ppa,回车确认安装......
  • screen命令后台运行python 脚本
    1、安装screenyuminstall-yscreen2、新建一个screenscreen-Sxiedi这样会新开一个窗口,然后执行命令即可pythonmanage.pyrunserver0.0.0.0:90003、重开一个窗口,列出所有screen进程,如下\[root@docker~\]\#screen-lsTherearescreenson:3029.xiedi(Attached......