在Python中,集合(Set)是一种无序、可变的数据结构,用于存储多个唯一的元素。集合中的元素不会重复,并且可以进行基本的集合操作,如并集、交集、差集等。??
注意:集合中的元素必须是不可变数据类型,例如 int、str、tuple、bool 等不可变数据类型。
?创建集合可以使用大括号 {} 或者使用 set() 函数。下面是创建集合的示例:
# 使用大括号创建集合
my_set = {1, 2, 3, 4, 5}
# 使用 set() 函数创建集合
my_set = set([1, 2, 3, 4, 5])
集合的特点包括:?
集合的遍历仅有一种方式,那就是直接遍历集合,下面是代码示例:
set1 = {1, 2, 3, 4, 5}
for i in set1:
print(i, end="")
?输出结果:12345
?在数学中,集合最常见的操作就是求集合的并集、差集、交集等。在python中,除了这些操作,集合还能进行添加、删除等操作。
?核心操作就是求交集、并集、差集以及补集,另外还有不怎么常用的超集、子集。以下进行一一的代码演示。
求交集,可以用 &,也可以使用 intersection 函数:
s3 = {2, 3, 4}
s4 = {3, 4, 5}
# 交集:你有我也有
s5 = s3 & s4
print(s5)
s5 = s3.intersection(s4)
print(s5)
输出结果:{3, 4}
??????????????????{3, 4}
?求并集,可以用 | ,也可以用 union 函数:
s3 = {2, 3, 4}
s4 = {3, 4, 5}
# 并集: 你有或者我有
s6 = s3 | s4
print(s6)
s6 = s3.union(s4)
print(s6)
输出结果:?{2, 3, 4, 5}
? ? ? ? ? ? ? ? ? ?{2, 3, 4, 5}
?求差集,可以用 - ,也可以用 difference 函数:
s3 = {2, 3, 4}
s4 = {3, 4, 5}
# 差集: 我有你没有
s7 = s3 - s4
print(s7)
s7 = s3.difference(s4)
print(s7)
输出结果:{2}
? ? ? ? ? ? ? ? ? {2}?
求补集,可以用 - ,也可用?symmetric_difference 函数:
# 补集 (全集 U)
U = {1, 2, 3, 4, 5}
A = {2, 3, 4}
print(U-A)
print(U.symmetric_difference(A))
输出结果:{1, 5}
? ? ? ? ? ? ? ? ? {1, 5}?
超集和子集主要用到了两个函数,一个是 issuperset ,一个是 issubset:
s1 = {1, 2, 3, 4, 5}
s2 = {3, 4}
# 可以把s1称为全集
# 超集和子集
print(s1.issuperset(s2))
print(s2.issubset(s1))
输出结果:True
? ? ? ? ? ? ? ? ? True
这两个函数主要用于判断两个集合之间的关系,了解就好。?
?直接上代码!
s2 = {1, 2, 3}
# 添加元素
s2.add(4)
print(s2)
输出结果:{1, 2, 3, 4}?
可以看出,add 函数是直接在集合中插入元素,但是要注意,如果被插入元素在集合中已存在,那么将不会插入,因为集合中不能重复。
?update 函数可以合并集合到原有集合:
s2 = {1, 2, 3}
# 合并新集合到原有集合
s2.update({2, 3, 4, 5})
print(s2)
输出结果:?{1, 2, 3, 4, 5}
update 的作用就是更新,把括号里包括的原集合没有的元素,添加到原集合。
鸡肋函数,pop ,删除集合中任意一个元素。虽然说是任意,但多次尝试,可能会发现每次删除的元素都是同一个元素,这是因为随机算法也是按照一定的规则的,不会像掷硬币那样客观。
s2 = {1, 2, 3}
# 随机删除一个
r = s2.pop()
print(s2, r)
输出结果:?{2, 3} 1
?如果你运行上面的代码,会发现每次删除的都是 1.?
remove 函数,才会是你想要的函数,因为它会删除指定元素,但不存在则会报错。代码中演示的是删除 20,但是集合 s2 中并不存在。
s2 = {1, 2, 3}
# 删除一个元素,如果不存在则报错
s2.remove(20)
print(s2)
?所以会报错:
另外 discard 函数和 remove 函数相似,优点是它删除指定元素时,如果不存在不会报错。
s2 = {1, 2, 3}
# 删除一个元素,如果不存在也不报错
s2.discard(20)
print(s2)
输出结果:{1, 2, 3}?
代码执行的操作是删除20,但20并不存在,所以不报错,原集合也不会改变 。?
另外还有两个操作,都很简单:
# 集合可以使用in与len
s = {1, 2, 3, 2, 1, 3}
print(type(s), s)
# 计算 s 的长度
print(len(s))
# 判断 5 和 3 是否在集合中
print(5 in s, 3 in s)
?输出结果:
🆗,本文到此结束,如果想要学习更多,可以关注我,我持续更新中~🌹🌹🌹