一、集合的定义 set:
- 集合与元组和列表相似都用于做容器,在内部可以放一些子元素
- 集合有三特殊特点:
子元素不重复
、子元素必须可哈希
、无序
。
二、集合类型操作符
- 集合支持用 in 和 not in 操作符检查成员
- 能够通过 len() 检查集合大小
- 能够使用 for 迭代集合成员
- 不能取切片,没有键
三、使用场景:
四、常用方法(功能:增删、交集并集差集)
序号 |
分类 |
关键字 / 函数 / 方法 |
说明 |
1 |
添加 |
集合.add(value) |
添加元素value |
2 |
删除 |
集合.remove(value) |
删除元素value,如果元素不是成员,则引发 KeyError。 |
3 |
交集 |
集合A & 集合B |
取2个集合的交集,相当于共同好友 |
|
|
集合A.intersection(集合B) |
取2个集合的交集 |
4 |
并集 |
集合A | 集合B |
取2个集合合并的内容,相当于家族合并 |
|
|
集合A.union(集合B) |
取2个集合合并的内容 |
5 |
差集 |
集合A - 集合B |
取2个集合的差集,集合A有的,集合B没有 |
|
|
集合B - 集合A |
取2个集合的差集,集合B有的,集合A没有 |
|
|
集合A.difference(集合B) |
取2个集合的差集 |
|
|
集合B.difference(集合A) |
取2个集合的差集 |
五、案例(比较文件内容):
- 有两个文件:a.log 和 b.log
- 两个文件中有大量重复内容
- 取出只有在 b.log 中存在的行
# 获取文件内容,并转换成集合
def get_set(file_name):
with open("/tmp/" + file_name, mode="r") as fr:
return set(fr.readlines())
if __name__ == '__main__':
set01 = get_set("a.log")
set02 = get_set("b.log")
print(set01, set02, sep="\n")
print("交集", set02.intersection(set01))
print("并集", set02.union(set01))
print("差集", set02.difference(set01))
print("交集", set02 & set01)
print("并集", set02 | set01)
print("差集", set02 - set01)