【Python】集合set详细讲解(语法、操作、集合运算、性能、使用场景)
文章目录
1. 语法
1.1 使用 {} 定义
my_set_0 = {1,2,3}
print(my_set_0)
输出:
1.2 使用 set() 定义
my_set_0 = {1,2,3}
print(my_set_0)
my_set_1 = set([1,2,3]) #通过set()函数定义,需要提供一个list作为输入集合
print(my_set_1) #打印的{1,2,3}只是表明set内部由1,2,3这三个元素,显示的顺序不表示set是有序的
my_set_2 = {1,2,3,4,4,4,4}
print(my_set_2) #重复元素在set中被自动过滤
输出:
2. 特点
3. 常用操作
3.1 访问元素
由于集合中的元素是无序的,因此无法向列表那样使用下标访问元素。Python 中,访问集合元素最常用的方法是使用循环结构,将集合中的数据逐一读取出来
a = {1,'c',1,(1,2,3),'c'}
for ele in a:
print(ele,end=' ')
输出:
3.2 查找数据
通过 in \ not in 进行数据的查找判断,打印判断结果True\False
my_set_0 = {1,2,3}
print(8 in my_set_0)
print(8 not in my_set_0)
输出:
3.3 添加元素
3.3.1 add() 方法
add()方法添加单个元素
my_set_0 = {1,2,3}
my_set_0.add(4)
print(my_set_0)
输出:
3.3.2 update()方法
update()方法添加多个元素
(集合有去重功能,当追加的数据是已有数据的话,则不进行任何操作)
my_set_0 = {1,2,3}
my_set_0.update([3,5,6,7,8]) #集合有去重功能,当追加的数据是已有数据的话,则不进行任何操作
print(my_set_0)
输出:
3.4 删除元素
3.4.1 remove()方法
remove()方法删除指定元素,如果元素不存在会抛出KeyError异常
my_set_0 = {1,2,3}
my_set_0.remove(3)
print(my_set_0)
my_set_0.remove(10)
print(my_set_0)
输出:
3.4.2 discard()方法
discard()方法删除指定元素,如果元素不存在不会抛出异常
my_set_0 = {1,2,3}
my_set_0.discard(3)
print(my_set_0)
my_set_0.discard(10)
print(my_set_0)
输出:
3.4.3 pop()方法
pop()方法随机删除集合中的某个元素,没有参数;当集合为空时再次使用pop方法会抛出KeyError异常
my_set_0 = {1,2,3}
del_num = my_set_0.pop()
print(del_num)
print(my_set_0)
del_num2 = my_set_0.pop()
print(del_num2)
print(my_set_0)
del_num3 = my_set_0.pop()
print(del_num3)
print(my_set_0)
del_num4 = my_set_0.pop() #当集合为空时再次使用pop方法会抛出KeyError异常
输出:
3.4.4 clear()方法
clear()方法删除集合中的所有元素,打印set()
my_set_0 = {1,2,3}
my_set_0.clear()
print(my_set_0)
输出:
3.5 集合运算
集合运算:set可以看成数学意义上的无序和无重复元素的集合,因此多个set可以做数学意义上的集合运算
定义以下两个集合:
set1 = {'a','b','c','d'}
set2 = {'c','d','e','f'}
3.5.1 并集:| 或者 union()
并集:使用 | 运算符或者 union()方法
当对多个集合进行合并时,用 , 隔开
set1 = {'a','b','c','d'}
set2 = {'c','d','e','f'}
union_set1 = set1 | set2
union_set2 = set1.union(set2)
print(union_set1)
print(union_set2)
set3 = {'happies','wealth','big house'}
union_sets = set.union(set1,set2,set3) #多个集合合并时,用 , 隔开
print(union_sets)
输出:
3.5.2 交集:& 、intersection() 或者 intersection_update()
set1 = {'a','b','c','d'}
set2 = {'c','d','e','f'}
set4 = {'c','1','2','3'}
in_set = set1 & set2
print(in_set) # 返回 set1 和 set2 的交集 {'c', 'd'}
in_set = set1.intersection(set2)
print(in_set) # 返回 set1 和 set2 的交集 {'c', 'd'}
in_set = set.intersection(set1,set2,set4)
print(in_set) # 返回 set1、set2、set4 多个集合的交集 {'c'}
in_set = set1.intersection_update(set2)
print(in_set) # intersection_update()方法不生成新集合,返回 None
print(set1) # intersection_update()方法直接修改原集合 set1
print(set2) # intersection_update()方法不修改 set2
输出:
3.5.3 差集 – 、difference() 或者 difference_update()
set1 = {'a','b','c','d'}
set2 = {'c','d','e','f'}
print(set1.difference(set2))
print(set1 - set2)
print(set1.difference_update(set2)) #difference_update是在原集合中进行的一个操作,所以返回值为 None
set1.difference_update(set2)
print(set1)
输出:
3.5.4 对称差集(异或)^ 或者 symmetric_difference() 方法
对称差集是指在两个集合中,只在其中一个集合中出现的元素组成的集合
set1 = {'a','b','c','d'}
set2 = {'c','d','e','f'}
print(set1 ^ set2)
print(set1.symmetric_difference(set2))
set1.symmetric_difference_update(set2)
print(set1)
print(set2)
输出:
3.6 判断数据
3.6.1 .issubset()方法
s1.issubset(s2)方法:判断s1是否 是s2的子集 ;用于判断集合的所有元素是否都在指定集合中,返回布尔值
set1 = {'a','b','c','d'}
set2 = {'c','d','e','f'}
union_set = set1 | set2
print(set1.issubset(set2))
print(set1.issubset(union_set))
输出:
3.6.2 .isdisjoint()方法
isdisjoint()方法:判断是否 无交集 ,判断两个集合中有无相同的元素,没有返回True
set1 = {'a','b','c','d'}
set2 = {'c','d','e','f'}
set3 = {'happies','wealth','big house'}
print(set1.isdisjoint(set2)) #有相同的元素返回False
print(set1.isdisjoint(set3)) #没有相同的元素返回True
输出:
3.6.3 .issuperset()方法
s1.issuperset(s2)方法:判断s1是否 是s2的超集 ;判断如果指定集合中的所有元素都存在原集合中,返回True
set1 = {'a','b','c','d'}
set2 = {'c','d','e','f'}
union_set = set1 | set2
print(set1.issuperset(union_set))
print(union_set.issuperset(set1))
输出:
3.7 集合推导式
even_squares = {x ** 2 for x in range(10) if x % 2 == 0}
print(even_squares) # 输出:{0, 4, 16, 36, 64}
4. 集合性能
5. 使用场景
5.1 去重操作
lst = [1, 2, 2, 3, 4, 4]
unique = list(set(lst)) # 去重 → [1, 2, 3, 4](顺序可能丢失)
print(unique)
输出:
5.2 成员检测
比列表的 in 操作快得多(列表为 O(n),集合为 O(1))
large_set = set(range(10**6))
print(999999 in large_set) # 极快
5.3 集合运算简化逻辑
eg:统计两篇文章的共有词汇
article1 = {"apple", "banana", "cherry"}
article2 = {"banana", "date", "elderberry"}
common_words = article1 & article2 # 输出:{"banana"}
6. 关于列表和集合
需要唯一元素 → 集合
需要顺序或重复元素 → 列表
7. 总结
作者:echo 慧