Python-两个列表取交集、并集、差集(编写了一个两个文件取交集的小工具)
最近突然有个需求(取两个文件数据的交集),数据量非常大(2000多万行的数据),最开始的思路是先取一个文件所有的数据,保存成一个列表,然后判断是否在另一个文件中,花了十几分钟写出来后,一运行,差点崩溃,太慢了。然后想到数学里的列表取交集,百度一下,果然有,测试了一下,速度非常快,完美的解决问题。
一、核心代码
注:先把列表用set转换成集合然后在取交集、并集和差集
两个列表取交集
list_1 = [1,2,3] list_2 = [2,3,4] print(list(set(list_1) & set(list_2))) print(list(set(list_1).intersection(set(list_2))))
#结果 [2, 3] [2, 3]
两个列表取并集
list_1 = [1,2,3] list_2 = [2,3,4] print(list(set(list_1) | set(list_2))) print(list(set(list_1).union(set(list_2))))
#结果 [1, 2, 3, 4] [1, 2, 3, 4]
两个列表取差集
注:下述两个方法效果不一样
list_1 = [1,2,3] list_2 = [2,3,4] print(list(set(list_1) ^ set(list_2))) #两个列表取差集 print(list(set(list_1).difference(set(list_2)))) #list_1中有而list_2中没有的
#结果 [1, 4] [1]
二、小工具
注:
- 每个文件的数据都是每行一条
- 此工具比较消耗内存(不过影响不大)
file_1_path = "./file_1.txt" #文件_1路径
file_2_path = "./file_2.txt" #文件_2路径
result_path = "./result.txt" #结果文件路径#把文件_1中的数据读取成列表file_1_list
with open(file_1_path, 'r', encoding='utf-8') as file_1_data:file_1_list = file_1_data.readlines()#把文件_2中的数据读取成列表file_2_list
with open(file_2_path, 'r', encoding='utf-8') as file_2_data:file_2_list = file_2_data.readlines()#两个列表取交集(并集或差集只需修改此处即可)
intersection_list = list(set(file_1_list) & set(file_2_list))#保存结果文件
with open(result_path,'a', encoding='utf-8') as f:num = 0for i in intersection_list:num += 1f.write(i)print("第%s个保存完成"%num)
print("保存文件结束!!!")
三、运行结果展示
可以看到800多万和300多万对比只用了6秒多(实际时间可能会根据电脑性能出现小误差)
Python-两个列表取交集、并集、差集(编写了一个两个文件取交集的小工具)相关推荐
- go自定义和使用set包处理列表 交集 并集 差集
自定义交集 并集 差集 package mainimport "fmt"func main() {aList := []string{"1", "2& ...
- python 数组 交集 并集 差集
python 数组 交集 并集 差集 1.交集 a = [1, 3, 5] b = [2, 3, 4] print(set(a).intersection(set(b))) print(set(a) ...
- oracle 并集 时间_Oracle集合运算符 交集 并集 差集
集合运算符:UNION/UNION ALL 并集,INTERSECT 交集,MINUS 差集 一.union求并集,公共部分只有包含一次 例:求emp表ename中含'A'或含有'M' SQL> ...
- sort求交集并集差集
uniq -u 取出只出现过一次的元素,用来求差集 uniq -c group by uniq -d 取出出现次数大于等于2的元素,用来求交集 sort 1 2 和cat 1 2 ...
- lambda 对象去重_采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集...
采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...
- 采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集
采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...
- MySQL求交集 并集 差集
MySQL求交集 并集 差集 交集 两个表之间相同的 并集 两个表之间的总和 ps: union 自带去重 差集 两个表直接的差值
- JAVA Hashset求集合的交集并集差集
JAVA Hashset求集合的交集并集差集 Hashset是Set接口较为常见的一个子类,该子类的最大特点是不允许保存重复的元素,并且所有的内容都采用散列(无序)的方式进行存储. package c ...
- A和B 单链表表示 集合,求其 交集 并集 差集
A和B 单链表表示 集合的 交集 并集 差集 /* A和B 单链表表示 集合的 交集 并集 差集 */ //#include <iostream> //using namespace st ...
- spark之交集并集差集拉链
spark之交集并集差集拉链 def main(args: Array[String]): Unit = { val sparkConf = new SparkConf().setMaster(&qu ...
最新文章
- Next.js 7发布,构建速度提升40%
- 理论基础 —— 栈 —— 链栈
- Linux安装JDK(rpm)
- MessageDigest简介
- linux多线程加解锁
- vue内容横向循环滚动_Vue替代marquee标签超出宽度文字横向滚动效果
- ubuntu环境搭建五:修改中文字符集
- openresty的安装和使用
- Linux查看和剔除当前登录用户-转
- Andrew Ng机器学习公开课笔记 -- 朴素贝叶斯算法
- Nacos教程_2 讲解
- 飞凌单片机解密_干货:芯片解密方法大全
- html 滑动刻度尺,js实现移动端H5页面手指滑动刻度尺功能
- 南京旅游迈入大数据时代
- 论文阅读《UV-SLAM: Unconstrained Line-Based SLAM Using Vanishing Points for Structural Mapping》R-AL 2022
- 怎么办?不到 20 人的 IT 公司我该去吗?
- Tableau参数:自定义周起始时间
- 计算机专业的短期计划范文,制定计算机学习计划范文3篇
- Homa: A Receiver-Driven Low-Latency Transport Protocol Using Network Priorities(Sigcomm'18) 论文记录
- 哈希表解决冲突的两种方式