美文网首页程序员
[Python] 高效比对两个列表的不同

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

作者: GuangHui | 来源:发表于2018-02-09 21:01 被阅读37次
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集合运算:
set集合运算.png

相关文章

  • [Python] 高效比对两个列表的不同

    1.概要说明: 通过不断的测试发现,python实现高效快速比对两个列表的不同,可借助python集合set()提...

  • Python列表生成式

    Python列表生成式 python里面[]表示一个列表,对容器类型的数据进行运算和操作,生成新的列表最高效、快速...

  • python 列表解析式:i for n in m的代码形式

    python 列表解析式:i for n in m的代码形式理解 列表解析 根据已有列表,高效创建新列表的方式。...

  • Python学习日志第六篇(931)

    数据结构 在Python中,两个主力数据结构是列表和字典。列表按顺序存储数据,而字典像小型数据库,使用键高效地存储...

  • 使用Python的scrapy框架进行爬虫(1)

    Python中的列表 列表和C语言中的数组很像,但列表的功能更强大,可以存储不同类型的数据列表是Python中内置...

  • python基础

    python列表常见操作 列表的介绍 列表可以放不同类型的元素,例:list =[ 1, 'a' ] 列表可以使用...

  • python中的列表、元组

    一、列表的介绍   列表用来存储多个变量,与C语言、java不同的是,python中的列表可以存储不同类型的语言。...

  • Python列表最常见的问题【总结】

    列表是Python中使用最多的一种数据结果,如何高效操作列表是提高代码运行效率的关键,本文总结了一些python列...

  • 将list添加到dataframe中

    Python中将列表转换成为数据框有两种情况:第一种是两个不同列表转换成一个数据框,第二种是一个包含不同子列表的列...

  • Python - lambda

    在Python中使用lambda高效操作列表.结合了包括map、filter、reduce、sorted等函数. ...

网友评论

    本文标题:[Python] 高效比对两个列表的不同

    本文链接:https://www.haomeiwen.com/subject/jlyqtftx.html