Python 数据结构详解——集合
set对象官方文档:
在Python中,set对象是一组无序且hash值唯一的对象.常用于测试是否包含,去重,以及进行诸如交集,合集,差集,对称差集等数学运算.
正如其它的collection模块一样,set支持x in set
, len(set)
以及for x in set
操作.作为一个无序的集合,set不会记录元素的位置或者插入顺序.由此,set不支持索引,切片或者其它序列行为.
目前有两种内置的set类型,set和frozenset.set是可变的——可以使用add()和move()方法改变内容.由于是可变的,set对象没有hash值,不能作为字典的关键字或者另一个set的元素.frozenset是不可变以及可hash的——它的内容在创建后不能改变;它就可以作为字典的key或者另一个set的元素.
set和frozenset使用方式大多是一样的.他们支持以下操作:
len(s) # 返回元素的个数
x in s # 判断x是否在s中
isdisjoint(other) # 如果和其它的集合交集为空,则返回True
# 是否为子集的判断
set <= other
set < other
set >= other
set > other
set | other | ... # 返回并集
set & other & ... # 返回交集
set - other - ... # 返回在set中,但不在其它集合中的元素
set ^ other # 返回仅在set或者other中的元素
可以通过如下方式更新set:
set |= other | other | ... # 将其它集合的元素添加到set中
set &= other & ... # 将交集更新set
set -= other | ... # 更新set,去除set中包含在other中的元素
set ^= other # 更新set,保存仅在set或者other中的元素
add() # 添加元素
remove() # 删除元素, 没有该元素则报错
discard() # 如果元素在集合中,则删除元素
pop() # 任意删除一个元素,集合为空则报错
clear() # 删除所有元素
使用示例
去重,成员判断,迭代
a = [1,2,3,1,5,2]
a_s = set(a)
print(f'a: {a}')
print(f'a_s: {a_s}')
print(f'len(a_s): {len(a_s)}')
print(f'1 in a_s: {1 in a_s}')
print(f'1 in a_s: {4 in a_s}')
a: [1, 2, 3, 1, 5, 2]
a_s: {1, 2, 3, 5}
len(a_s): 4
1 in a_s: True
1 in a_s: False
for s in a_s:
print(s, end=', ')
1, 2, 3, 5,
集合运算
sa = {1,2,3,4,5}
sb = {3,4,5,6,7}
sc = {8,9,0}
是否重叠(交集是否为空)
print(f'sa和sb交集是否为空:{sa.isdisjoint(sb)}')
print(f'sa和sc交集是否为空:{sa.isdisjoint(sc)}')
sa和sb交集是否为空:False
sa和sc交集是否为空:True