集合是无序、无重复元素的容器,核心特性:基于元素唯一性做集合关系判定,所有比较运算符最终判断两个集合的包含、相等、相交关系,返回布尔值 True/False。
一、先铺垫:集合基础
a = {1, 2, 3}
b = {1, 2, 3, 4}
c = {2, 3, 1}
d = {5, 6}
集合无序,a == c 结果为 True,元素相同即相等,和顺序无关。
二、六大比较运算符(常用)
1. == 等于 / != 不等于
判断两个集合元素完全一模一样,不关心顺序。
a = {1,2,3}
c = {3,1,2}
print(a == c) # True,元素完全相同
print(a != b) # True,元素有差异
2. < 真子集(严格子集)
A < B:A 所有元素都在 B 中,且 B 有 A 没有的元素数学表达:
print(a < b) # True {1,2,3} 是 {1,2,3,4} 的真子集
print(b < a) # False
print(a < c) # False 元素完全相等,不满足严格小于
3. <= 子集(包含于)
A <= B:A 全部元素都在 B 中,允许两个集合完全相等 数学表达:
print(a <= b) # True
print(a <= c) # True 完全相等也成立
4. > 真超集(严格超集)
A > B:A 包含 B 全部元素,且 A 有额外元素 数学表达:
print(b > a) # True
print(a > c) # False
5. >= 超集(包含)
A >= B:A 包含 B 所有元素,允许相等 数学表达:
print(b >= a) # True
print(c >= a) # True
三、对应内置方法(功能和运算符等价,可读性更高)
| | |
|---|
A <= B | A.issubset(B) | |
A < B | A.issubset(B) and A != B | |
A >= B | A.issuperset(B) | |
A > B | A.issuperset(B) and A != B | |
示例:
print(a.issubset(b)) # True 等价 a <= b
print(b.issuperset(a)) # True 等价 b >= a
四、交集判断:是否有公共元素(无对应比较运算符)
isdisjoint():判断两个集合无任何交集
返回 True = 完全不相交,没有共同元素
print(a.isdisjoint(d)) # True {1,2,3} 和 {5,6} 无交集
print(a.isdisjoint(b)) # False 存在公共元素
五、集合比较常见易错点
列表/元组不能直接和集合用 < > <= >= 比较必须先转集合:
lst = [1,2]
# print(lst < a) 报错
print(set(lst) < a) # True
无序不影响相等判断{1,2} == {2,1} → True,和列表 [1,2]!=[2,1] 区分开。
empty = set()
print(empty <= {1,2}) # True
print(empty < {1,2}) # True
print(empty <= empty) # True
print(empty < empty) # False 相等不是真子集
- 不可哈希类型不能放入集合(列表、字典等),无法参与比较
# s = {[1,2]} 报错,列表不可哈希
六、完整综合示例
s1 = {1, 2, 3}
s2 = {1, 2, 3, 4}
s3 = {1, 2, 3}
s4 = {5, 6}
# 相等判断
print(s1 == s3) # True
print(s1 != s2) # True
# 子集
print(s1 <= s2) # True
print(s1 < s2) # True
print(s1 <= s3) # True
print(s1 < s3) # False
# 超集
print(s2 >= s1) # True
print(s2 > s1) # True
# 无交集
print(s1.isdisjoint(s4)) # True
# 方法等价
print(s1.issubset(s2)) # True
print(s2.issuperset(s1)) # True
七、总结速查表
<= / issubset():子集(包含或相等)>= / issuperset():超集(包含或相等)