集合
Python 提供了两种内置的集合类型:可变的 set
类型,固定的 frozenset
类型。
可变集合(set):可添加和删除元素,非可哈希的,不能用作字典的键,也不能做其他集合的元素。
不可变集合(frozenset):与上面恰恰相反。
只有可哈希运算的对象可以添加到集合中,所有内置固定数据类型(比如 float
、frozenset
、int
、str
、tuple
)都是可哈希运算的,都可以添加到集合中。内置的可变数据类型(比如 dict
、list
、set
)都不是可哈希运算的,因为其哈希值会随着包含项数的变化而变化,因此这些数据类型不能添加到集合中。
集合的作用
集合是一个无序的,不重复的数据组合,它的主要作用是去重,把一个列表变成集合,就自动去重了:
1 | li=[1,2,'a','b'] |
另外,使用集合还可以进行快速的成员关系测试,测试两组数据之前的交集、差集、并集等关系。
集合对象是一组无序排列的可哈希的值,集合成员可以作为字典的键。
集合的相关操作
创建
集合没有自己的语法格式,只能通过集合的方法 set()
和 frozenset()
创建。
1 | 'Tom') s1 = set( |
访问
由于集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或使用 in
、not in
来访问或判断集合元素。
1 | 'Tom','Jerry']) s1 = set([ |
更新
可使用以下内建方法来更新:
1 | s.add() |
需要注意的是只有可变集合才能更新:
1 | 'Tom and Jerry') s1 = set( |
删除
del:删除集合本身。
集合类型操作符
成员关系 in
,not in
。集合等价与不等价( ==
, !=
)。子集、超集(<
, >
)。
1 | 'Tom and Jerry') s1 = set( |
联合(|
):与集合的 or
等价的,联合符号的等价方法是 union()
。
1 | 'Tom') s1=set( |
交集(&
):与集合的 and
等价,交集符号的等价方法是 intersection()
。
1 | 'abc') s1=set( |
差集(-
):等价方法是 difference()
。
1 | 'abc') s1=set( |
对称差集(^
):对称差分是集合的 XOR (‘异或’),取得的元素属于 s1,s2 但不同时属于 s1和 s2 ,其等价方法 symmetric_difference()
。
1 | 'abc') s1=set( |
应用
最简单的去重方式
1 | 1,2,3,4,1,2,3,4] x = [ |