python 列表比较不同_[Python] 高效比对两个列表的不同

1.概要说明:

通过不断的测试发现,python实现高效快速比对两个列表的不同,可借助python集合set()提供的集合运算进行操作,此方式效率非常高.

而在java语言中,如下方法中方法1相比方法2(集合运算)的方式效率更高速度更快一些.这算是两种语言相通之处的一点不同吧.

2.代码:

#-*- coding:utf-8 -*-

import time

#方法1:

def getDiff1(arr1,arr2):

start_time = time.time()

print('1_start:',start_time)

arr_more1 = []

arr_more2 = []

dic_result = {}

for str_1 in arr1:

dic_result[str(str_1)] = 1

for str_2 in arr2:

if dic_result.get(str(str_2)):

dic_result[str(str_2)] = 2

else:

arr_more2.append(str_2)

for key,val in dic_result.items():

if val == 1:

arr_more1.append(key)

print('arr1比arr2多的内容为:',len(arr_more1))

print('arr2比arr1多的内容为:',len(arr_more2))

end_time = time.time()

print('1_end:',end_time)

print('方法1_比对用时为',end_time-start_time)

#方法2:使用集合运算:

def getDiff2(arr1,arr2):

start_time = time.time()

print('2_start:',start_time)

set_1 = ()

set_2 = ()

#将列表转换为集合set()

set_1 = set(arr1)

set_2 = set(arr2)

set_more1 = ()

set_more2 = ()

#集合运算

set_1_2 = set_1 & set_2

set_more1 = set_1 -set_1_2

set_more2 = set_2 -set_1_2

print('arr1比arr2多的内容为:',len(set_more1))

print('arr2比arr1多的内容为:',len(set_more2))

end_time = time.time()

print('2_end:',end_time)

print('方法2_比对用时为',end_time-start_time)

#测试

# 初始化500w条数据数据

arr1 = []

arr2 = []

i = 0

while(True):

arr1.append(i * 2)

arr2.append(i * 3)

i += 1

if i > 5000000:

break

print('arr1的长度为:',len(arr1))

print('arr2的长度为:',len(arr2))

print('+'*30)

getDiff1(arr1,arr2)

print('-'*30)

getDiff2(arr1,arr2)

3.运行结果:

D:\python_project\venv\Scripts\python.exe D:/python_project/Test01/CompareTest.py

arr1的长度为: 5000001

arr2的长度为: 5000001

++++++++++++++++++++++++++++++

1_start: 1518180720.871

arr1比arr2多的内容为: 3333334

arr2比arr1多的内容为: 3333334

1_end: 1518180730.1929998

方法1_比对用时为 9.321999788284302

------------------------------

2_start: 1518180730.36

arr1比arr2多的内容为: 3333334

arr2比arr1多的内容为: 3333334

2_end: 1518180731.3630002

方法2_比对用时为 1.003000259399414

Process finished with exit code 0

通过观察运行结果,可以明显的发现方法2要比方法1执行更快更高效.

4.set集合运算:

9cebfd0a84cc

set集合运算.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值