Python容器-4·set集合
2023-01-02 本文已影响0人
技术老男孩
一、集合的定义 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)