集合在python中算是比较年轻的数据结构,同时使用率也偏低,但是set却是python的内置类型,下面详细总结了一下集合常用的方法及特性。
导语
一般来讲集合有两种形态,set和frozenset,两种结构的区别在于set是不可哈希的,而frozenset是可哈希的,但是应该注意的是set中包含的元素必须是可哈希的,所以,set 中的元素可以是frozenset。
set的特性
- set中的元素是不可重复的,利用这项特性可以快速对容器中的元素进行去重
>>>my_list1 = [1, 3, 3, 2, 3, 2, 1]
>>>my_list2 = list(set(my_list1))
>>>my_list2
[1, 2, 3]
- 集合推导
>>>set1 = {i for i in range(10)}
>>>set1
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
- 集合之间的数学运算
#交集
a & b # a和b的交集,a、b必须都是集合
b & a # a和b的反向交集, a、b必须都是集合
a.intersection(iteritem, ....) # 集合a和任意可迭代对象的交集
a &= b # 把a更新为a和b的交集,a、b必须都是集合
a.intersection_update(iteritem, ....) # 把a更新为集合a和任意可迭代对象的交集
#并集
a | b # a和b的并集,a、b必须都是集合
b | a # a和b的反向并集, a、b必须都是集合
a.union(iteritem, ....) # 集合a和任意可迭代对象的并集
a |= b # 把a更新为a和b的并集,a、b必须都是集合
a.update(iteritem, ....) # 把a更新为集合a和任意可迭代对象的并集
#差集
a - b # a和b的差集,a、b必须都是集合
b - a # a和b的反向差集, a、b必须都是集合
a.difference(iteritem, ....) # 集合a和任意可迭代对象的差集
a -= b # 把a更新为a和b的差集,a、b必须都是集合
a.difference_update(iteritem, ....) # 把a更新为集合a和任意可迭代对象的差集
#差集
a ^ b # a和b的对称差集,a、b必须都是集合
b ^ a # a和b的反向对称差集, a、b必须都是集合
a.symmetric_difference(iteritem, ....) # 集合a和任意可迭代对象的反向差集
a ^= b # 把a更新为a和b的反向差集,a、b必须都是集合
a.symmetric_difference_update(iteritem, ....) # 把a更新为集合a和任意可迭代对象的反向差集
集合的比较运算符,返回值为不二类型
a.isdisjoint(b) # 查看a和b是否不相交
a in b # 元素a是否属于b
a <= b # 元素a是否是b的子集
a < b # 元素a是否是b的真子集
a >= b # 元素a是否是b的父集
a > b # 元素a是否是b的真父集
集合的其他方法
a.add(b) # 把元素b添加到集合a中
a.clear() # 移除集合a中的元素
a.copy() # 对集合a进行浅拷贝
a.discard(b) # 集合a中如果有b的话,将b移除
a.__iter__() # 返回a的迭代器
a.__len__() # 返回集合a的长度
a.pop() # 从集合中移除一个元素作为返回值,如果集合为空,抛出KeyError
a.remove(b) # 从集合中移除元素b,如果集合为空,抛出KeyError