当前版本:
简介
? ? Python中的集合是一种无序、可哈希的且不重复的数据类型,用于存储唯一的元素。集合的实现基于哈希表,因此在插入、查找和删除元素时具有高效性能。集合的每个元素都必须是不可变的,可以是数字、字符串、元组等。
????????
文章目录如下
????????
在python中,一般通过花括号或set来定义一个集合,例如
S = set() # 定义一个空的集合
使用花括号定义一个有数据的集合
S = {1}
注意:由于定义集合的符号与字典一致,所以当定义一个空的花括号会被识别为字典,而不是集合
????????
????????
我们一般使用花括号来定义一个集合,当集合中存在多个数据时,使用逗号将其分割,而这些数据被称为元素。
S = {"元素1", "元素2", "元素3"}
这些元素可以是数字、字符串、元组等
S = {1.1, "AA", ("X", "Y")}
????????
由于集合中的元素必须是可哈希的(hashable)。
如列表、字典是不可哈希的对象(指在其生命周期中可能发生变化的对象)是无法定义到集合中
????????
虽然不能定义到集合中,但是可以将列表转换为集合
L = [1, 2, 3]
S = set(L)
由于集合其中一个特性是不可重复,这也就意味着将某个列表元素去重时,可以利用集合来实现。
# 定义一个列表
L = ["AAA", 10, "AAA", 20, "BBB"]
# 将列表转换为集合(自动去重)
S = set(L)
# 再将集合转换为列表
L = list(S)
????????
理解了集合的特性,以及定义的方式,下面介绍一些集合的常见用法:增删改查、统计、判断等。
常用的两种添加元素方法:
【案例一】添加一个元素 add
S = {"A", "B"}
S.add(10)
????????
【案例二】添加多个元素 update
S = {"A", "B"}
S.update([1, 2, 3])
????????
常见有4种删除元素的方法:
【案例一】移除一个元素,若不存在则引发错误 remove
S = {"A", "B", "C"}
S.remove("A")
????????
?【案例二】移除一个元素,若不存在则不做任何操作 discard
S = {"A", "B", "C"}
S.discard("A")
????????
?【案例三】随机移除一个元素,若集合为空则报错 pop
S = {"A", "B", "C"}
S.pop()
????????
?【案例四】清空元素 clear
S = {"A", "B", "C"}
S.clear()
????????
集合是无序且不可更改的,所以需要修改某个元素时只能先删除,后添加
S = {"A", "B", "C"}
# 移除B
S.discard("B")
# 添加E
S.add("E")
????????
? ? 由于集合是无序的,所以在需要使用索引来访问某个元素时,可以将其转换为列表后操作。但问题又来了,虽然可以使用列表访问,但顺序已经被打乱后是无法精确匹配某个元素的,这对我们来说毫无意义。
? ? 集合一般是用于存储唯一元素的无序数据结构,重点在于元素的唯一性和高效的成员关系测试。所以它的重点并不是用于访问单个元素,而是用于快速读取。
S = {1, 2, "A", "B"}
for i in S:
print(f"当前元素是: {i}")
????????
这一章节主要介绍统计元素的个数、以及求最大值、最小值等
【案例一】统计元素个数 len
S = {1, 2, "A", "B"}
len(S)
????????
【案例二】求最大值(仅全数字)max
S = {1.2, 5, 0.8, 6}
max(S)
????????
?【案例三】求最小值(仅全数字)min
S = {1.2, 5, 0.8, 6}
min(S)
????????
?【案例四】求和(仅全数字)sum
S = {1.2, 5, 0.8, 6}
sum(S)
????????
?【案例五】求平均值(仅全数字)sum/len
S = {1.2, 5, 0.8, 6}
sum(S) / len(S)
????????
在集合中一般通过 in 判断某个元素是否存在。成功为True,失败为False
S = {1, 2, "A", "B"}
"A" in S
"A" not in S
????????
集合可以进行并集、交集、差集、对称差集等运算,用于解决各种集合操作问题。
并集是指将两个或多个集合中的所有元素合并成一个新的集合的操作。在数学符号中,通常用符号∪(并集符号)表示。在集合中使用符号 | 或者?union() 方法来实现。
【案例一】| 符号实现并集
S1 = {1, 2, 3}
S2 = {3, 4, 5}
union_set = S1 | S2
????????
【案例二】union() 实现并集
S1 = {1, 2, 3}
S2 = {3, 4, 5}
union_set = S1.union(S2)
????????
交集是指两个集合中共同存在的元素所构成的新集合。在数学符号中,通常用符号∩(交集符号)表示。在集合中使用符号 &?或者?intersection() 方法来实现。
【案例一】& 符号实现交集
S1 = {1, 2, 3}
S2 = {3, 4, 5}
intersection_set = S1 & S2
????????
【案例二】intersection() 实现交集
S1 = {1, 2, 3}
S2 = {3, 4, 5}
intersection_set = S1.intersection(S2)
????????
差集是指一个集合相对于另一个集合的差异部分所构成的新集合。在数学符号中,通常使用符号 (-(减号)) 或者 (-(差集符号)) 表示。在集合中使用符号 -?或者?difference() 方法来实现。
?【案例一】符号 -?实现差集
S1 = {1, 2, 3, 4, 5}
S2 = {3, 4, 5}
difference_set = S1 - S2
????????
【案例二】difference() 实现差集
S1 = {1, 2, 3, 4, 5}
S2 = {3, 4, 5}
difference_set = S1.difference(S2)
????????
【案例三】被 - 集合存在不同的元素
S1 = {1, 2, 3, 4, 5}
S2 = {3, 4, 5, 6}
difference_set = S1 - S2
????????
对称差集用于表示两个集合之间的差异,包含的是那些只属于其中一个集合的元素,而不属于两个集合的交集。
【案例一】符号 ^ 实现对称差集
S1 = {1, 2, 3}
S2 = {2, 3, 4}
symmetric_difference = S1 ^ S2
????????
【案例二】symmetric_difference() 实现对称差集
S1 = {1, 2, 3}
S2 = {2, 3, 4}
symmetric_difference = S1.symmetric_difference(S2)
????????