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

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

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

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

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]
相关文章
|
5天前
|
Python
Python中几种lambda排序方法
【9月更文挑战第7天】在Python中,`lambda`表达式常用于配合排序函数,实现灵活的数据排序。对于基本列表,可以直接使用`sorted()`进行升序或降序排序;处理复杂对象如字典列表时,通过`lambda`指定键值进行排序;同样地,`lambda`也适用于根据元组的不同位置元素来进行排序。
|
16天前
|
索引 Python 容器
为什么Python中会有集合set类型?
为什么Python中会有集合set类型?
|
16天前
|
Python
|
16天前
|
算法 定位技术 vr&ar
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
84 0
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
|
14天前
|
UED Python
探索Python中的魔法方法:打造自定义字符串表示
【8月更文挑战第31天】在Python的世界里,魔法方法是那些以双下划线开头和结尾的特殊方法,它们为类提供了丰富的功能。本文将带你走进这些魔法方法的背后,特别是__str__和__repr__,揭示如何通过它们来定制我们的对象在被打印或转换为字符串时的外观。我们将从基础用法开始,逐步深入到高级技巧,包括继承与重写,最终实现一个优雅的字符串表示方案。准备好了吗?让我们开始这段代码之旅吧!
|
4月前
|
存储 Python
Python中,集合(Set)
Python中,集合(Set)
36 1
|
4月前
|
存储 索引 Python
Python中的集合(Set)
Python中的集合(Set)
52 3
|
1月前
|
Python
python集合类型 (Set Types)
【8月更文挑战第3天】
50 9
|
4月前
|
存储 安全 Java
Python教程第3章 | 集合(List列表、Tuple元组、Dict字典、Set)
Python 列表、无序列表、字典、元组增删改查基本用法和注意事项
81 1
|
4月前
|
存储 索引 Python
python数据结构,集合(set)和字典(dict)之间的主要区别是什么?
python数据结构,集合(set)和字典(dict)之间的主要区别是什么?
136 2