Python中的集合可以执行数学集合运算,如判断某个集合是否为另一个集合的子集、并集、交集等,使用运算符或集合方法都可以做到。下面将讨论常见的集合方法。
1、issubset()方法或“<=”“<”求子集
如果集合A中的任意一个项都是集合B中的项,那么集合A称为集合B的子集。集合的issubset()方法用于判断某个集合是否为另一个集合的子集:
- >>> # 下面三个集合中,b是a的子集, 同时b也是c的子集
- >>> a = {1, 2, 3}
- >>> b = {1, 2}
- >>> c = {1, 2, 4}
- >>> b.issubset(a)
- True
- >>> b.issubset(c)
- True
- >>> a.issubset(b) # b是a的子集,但a不是b的子集
- False
- >>> c.issubset(a) # a不是c的子集,返回False
- False
- >>> a.issubset(a) # 每个集合都一定是自己的子集
- True
也可以使用“<=”操作符来判断某个集合是否为另一个集合的子集,这与issubset()方法是等价的:
- >>> a = {1, 2, 3}
- >>> b = {1, 2}
- >>> c = {1, 2, 4}
- >>> b <= a
- True
- >>> b <= c
- True
- >>> a <= b
- False
- >>> c <= a
- False
- >>> a <= a
- True
如果集合A是集合B的子集,但集合A不等于集合B,那么集合A称为集合B的真子集。可以使用“<”操作符来判断某个集合是否为另一个集合的真子集:
- >>> a = {1, 2, 3}
- >>> b = {1, 2}
- >>> b < a # b是a的真子集
- True
- >>> a < a # a不是自己的真子集
- False
2、issuperset()方法或“>=”“>”求超集
与子集对应的是超集。如果集合A是集合B的子集,那么集合B是集合A的超集。集合的issuperset()方法用于判断某个集合是否为另一个集合的超集:
- >>> # 下面三个集合中,a是b的超集, 同时c也是b的超集
- >>> a = {1, 2, 3}
- >>> b = {1, 2}
- >>> c = {1, 2, 4}
- >>> a.issuperset(b)
- True
- >>> c.issuperset(b)
- True
- >>> b.issuperset(a)
- False
- >>> a.issuperset(c) # a不是c的超集,返回False
- False
- >>> a.issuperset(a) # 每个集合都一定是自己的超集
- True
也可以使用“>=”操作符来判断某个集合是否为另一个集合的超集,这与issuperset()方法是等价的:
- >>> a = {1, 2, 3}
- >>> b = {1, 2}
- >>> c = {1, 2, 4}
- >>> a >= b
- True
- >>> c >= b
- True
- >>> b >= a
- False
- >>> a >= c
- False
- >>> a >= a
- True
如果集合A是集合B的超集,但集合A不等于集合B,那么集合A称为集合B的真超集。可以使用“>”操作符来判断某个集合是否为另一个集合的真超集:
- >>> a = {1, 2, 3}
- >>> b = {1, 2}
- >>> a > b # a是b的真超集
- True
- >>> a > a # a不是自己的真超集
- False
3、()方法或“|”求并集
给定两个集合A、B,将它们所有的项合并在一起组成的集合,称为集合A与集合B的并集。集合的()方法用于求集合间的并集:
- >>> a = {1, 2, 3}
- >>> b = {2, 3, 4}
- >>> c = {5, 6, 7}
- >>> a.(b) # a和b的并集
- {1, 2, 3, 4}
- >>> b.(c) # b和c的并集
- {2, 3, 4, 5, 6, 7}
- >>> c.(b) # 并集运算满足交换律,即b和c的并集等于c和b的并集
- {2, 3, 4, 5, 6, 7}
“|”操作符可以用来代替()方法:
- >>> a = {1, 2, 3}
- >>> b = {2, 3, 4}
- >>> c = {5, 6, 7}
- >>> a | b
- {1, 2, 3, 4}
- >>> b | c
- {2, 3, 4, 5, 6, 7}
- >>> c | b
- {2, 3, 4, 5, 6, 7}
多个集合间可以求并集,这种情况下使用“|”操作符往往更方便:
- >>> a = {1, 2, 3}
- >>> b = {2, 3, 4}
- >>> c = {5, 6, 7}
- >>> a | b | c
- {1, 2, 3, 4, 5, 6, 7}
4、intersection()方法或“&”求交集
两个集合A和B的交集是含有所有既属于集合A又属于集合B的项,而没有其他项的集合。集合的intersection()方法用于求集合间的交集:
- >>> a = {1, 2, 3}
- >>> b = {2, 3, 4}
- >>> c = {5, 6, 7}
- >>> a.intersection(b) # a和b的交集
- {2, 3}
- >>> b.intersection(a) # 交集运算满足交换律
- {2, 3}
- >>> a.intersection(c) # a和c的交集是空集
- set()
“&”操作符可以用来代替intersection()方法:
- >>> a = {1, 2, 3}
- >>> b = {2, 3, 4}
- >>> c = {3, 5, 6}
- >>> a & b
- {2, 3}
- >>> b & c
- {3}
- >>> a & b & c # 多个集合间求交集
- {3}
- >>> a & a # 任意一个集合和自己的交集是它本身
- {1, 2, 3}
5、difference()方法或“-”求差集
集合A与集合B的差集是含有所有属于集合A而不属于集合B的项,而没有其他项的集合。集合的difference()方法用于求集合间的差集:
- >>> a = {1, 2, 3}
- >>> b = {2, 3, 4}
- >>> c = {5, 6, 7}
- >>> b.difference(c) # b与c的差集
- {2, 3, 4}
- >>> a.difference(b) # a与b的差集
- {1}
- >>> c.difference(b) # 差集运算不满足交换律
- {5, 6, 7}
“-”操作符可以用来代替difference()方法:
- >>> a = {1, 2, 3}
- >>> b = {2, 3, 4}
- >>> c = {5, 6, 7}
- >>> a - b
- {1}
- >>> b - c
- {2, 3, 4}
- >>> c - b
- {5, 6, 7}
- >>> a - a # 任意一个集合与自己的差集是空集
- set()
6、symmetric_difference()方法或“^”求对称差集
两个集合的对称差集是只属于其中一个集合,而不属于另一个集合的项组成的集合。集合的symmetric_difference()方法用于求集合间的对称差集:
- >>> a = {1, 2, 3}
- >>> b = {2, 3, 4}
- >>> c = {3, 6, 7}
- >>> a.symmetric_difference(b) # a和b的对称差集
- {1, 4}
- >>> b.symmetric_difference(c) # b和c的对称差集
- {2, 4, 6, 7}
- >>> b.symmetric_difference(a) # 对称差集运算满足交换律
- {1, 4}
“^”操作符可以用来代替symmetric_difference()方法:
- >>> a = {1, 2, 3}
- >>> b = {2, 3, 4}
- >>> c = {3, 6, 7}
- >>> a ^ b
- {1, 4}
- >>> b ^ c
- {2, 4, 6, 7}
- >>> b ^ a
- {1, 4}
- >>> a ^ a # 任意一个集合和自己的对称差集是空集
- set()