set
集合是元素的聚集,具有无序
,唯一性
两大特点。
常见的用途包括成员检测、从序列中去除重复项
以及数学中的集合类计算,例如交集
、并集
、差集
与对称差集等等。
一、集合的构建
1.使用set([iterable])
如果没有传入可迭代对象iterable
,则构建一个空的集合
- 注意:不能通过
{}
来构建空集,因为这样创建的是一个空的字典。
data = set()
data.add('adc')
data.add('adc')
data.add('mid')
data.add('top')
# 存储是无序的,与添加的先后无关
# 自动去重
print(data) # {'top', 'mid', 'adc'}
利用该构造函数,可以方便的对列表去重,set()
对去重做了特别的优化,比我们自己遍历去重效率高的多。
words = ['top', 'mid', 'adc', 'top']
words = list(set(words))
print(words) # ['adc', 'top', 'mid'] # 去重后不保证顺序
2.直接在{}
中构建
data = {1, 3, 3, 5, 6}
print(data) # {1, 3, 5, 6}
这种方式比第一种效率更高。
二、集合的成员检测 in
集合里的元素必须是可哈希的,所以在集合中查找元素会更高效,这也是设计集合的最主要目的,像集合的并集
,交集
,差集
都是建立在此基础上。
虽然list
列表也可以使用in
关键字比较,但这是通过遍历比较的,效率与set
不可同日耳语,如果数据中有大量的in
判断,建议使用set()
-
x in s
检测 x 是否为 s 中的成员。 -
x not in s
检测 x 是否非 s 中的成员。
三、两个集合间的操作
set | other
-
union(others:Iterable)
返回两个集合的并集
data = {1, 3, 3, 5, 6}
ret = data.union([9, 11, 13]) # union可以对任意可迭代对象求并集
print(ret)
set & other
-
intersection(others:Iterable)
返回两个集合的交集 set - other
-
difference(others:Iterable)
返回两个集合的差集
网友评论