Python 集合(set)详解
什么是集合(set)
在Python中,集合(set)是一种无序、不重复的数据集合。它类似于数学中的集合概念,可以用于对数据进行去重、交集、并集等操作。
集合中的元素必须是不可变对象,例如数字、字符串、元组等,而不能包含可变对象,例如列表、字典等。
创建集合
在Python中,可以使用花括号 {}
或者 set()
函数来创建一个集合。
# 使用花括号创建集合
s = {1, 2, 3, 4, 5}
print(s)
# 输出:{1, 2, 3, 4, 5}
# 使用set()函数创建集合
s = set([1, 2, 3, 4, 5])
print(s)
# 输出:{1, 2, 3, 4, 5}
集合操作
添加元素
可以使用 add()
方法来向集合中添加元素,如果元素已经存在于集合中,则不会进行任何操作。
s = {1, 2, 3}
s.add(4)
print(s)
# 输出:{1, 2, 3, 4}
s.add(3)
print(s)
# 输出:{1, 2, 3, 4}
删除元素
可以使用 remove()
方法来删除集合中的元素,如果元素不存在于集合中,则会抛出 KeyError
错误。另外,可以使用 discard()
方法来删除集合中的元素,如果元素不存在于集合中,则不会报错。
s = {1, 2, 3}
s.remove(2)
print(s)
# 输出:{1, 3}
s.discard(3)
print(s)
# 输出:{1}
集合运算
可以使用交集、并集等运算符和方法对集合进行操作。
- 交集:
&
或者intersection()
- 并集:
|
或者union()
- 差集:
-
或者difference()
- 对称差集:
^
或者symmetric_difference()
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
# 交集
print(set1 & set2)
# 输出:{3, 4}
print(set1.intersection(set2))
# 输出:{3, 4}
# 并集
print(set1 | set2)
# 输出:{1, 2, 3, 4, 5, 6}
print(set1.union(set2))
# 输出:{1, 2, 3, 4, 5, 6}
# 差集
print(set1 - set2)
# 输出:{1, 2}
print(set1.difference(set2))
# 输出:{1, 2}
# 对称差集
print(set1 ^ set2)
# 输出:{1, 2, 5, 6}
print(set1.symmetric_difference(set2))
# 输出:{1, 2, 5, 6}
集合方法
clear()
clear()
方法用于清空集合中的所有元素。
s = {1, 2, 3}
s.clear()
print(s)
# 输出:set()
copy()
copy()
方法用于复制一个集合。
s = {1, 2, 3}
s2 = s.copy()
print(s2)
# 输出:{1, 2, 3}
pop()
pop()
方法用于随机移除一个元素,并返回该元素的值。因为集合是无序的,所以被移除的元素是随机的。
s = {1, 2, 3, 4, 5}
print(s.pop())
# 可能输出:1
update()
update()
方法用于将另一个集合或可迭代对象的元素添加到集合中。
s = {1, 2, 3}
s.update([4, 5, 6])
print(s)
# 输出:{1, 2, 3, 4, 5, 6}
isdisjoint()
isdisjoint()
方法用于判断两个集合是否没有交集,如果没有交集返回 True
,否则返回 False
。
set1 = {1, 2, 3}
set2 = {4, 5, 6}
print(set1.isdisjoint(set2))
# 输出:True
set3 = {3, 4, 5}
print(set1.isdisjoint(set3))
# 输出:False
issubset() 和 issuperset()
issubset()
方法用于判断一个集合是否是另一个集合的子集,issuperset()
方法用于判断一个集合是否是另一个集合的超集。
set1 = {1, 2, 3}
set2 = {1, 2}
print(set2.issubset(set1))
# 输出:True
print(set1.issuperset(set2))
# 输出:True
总结
集合(set)是Python中一种非常有用的数据结构,适合用于去重和集合运算。