python 遍历 两列表比较A列表中是否存在于B列表的两种方法的 性能测试

在遍历对比中,我曾使用.index函数去对列表元素进行比较,在index函数中,描述为

检测字符串中是否包含子字符串 str

这意味着A元素并不是完全等同于B元素,而是B元素中包含了A元素,在这种情况下,才需要使用到index函数,盲目使用函数或许浪费大部分性能,并且index抛出错误,使用try将再次损耗性能

所以 我做了以下测试,去验证性能

首先使用time模块并定义两个列表用于比较

import time

list=[1,2,3,4,5,6,7]

list1=[1,2,3,4,5,6,7,8,9,10,11,12,13,14]

由于单独运行的结果非常小,所以采用同样的循环增加次数

k=0

while k < 10000:

    k+=1

完整验证代码如下

#列表查找检测
import time
list=[1,2,3,4,5,6,7]
list1=[1,2,3,4,5,6,7,8,9,10,11,12,13,14]

start = time.time()

k=0
while k < 10000:
    k+=1
    for i in list1:
        for n in list:
            if i == n :
                object_listnnnn = i
            else:
                object_listnnnn = i



end = time.time()
print((end - start))
start = time.time()

k=0
while k < 10000:
    k+=1
    for i in list1:
        for n in list:
            try:
                object_listnnnn = list.index(i)
                object_listnnnn = i

            except:
                object_listnnnn = i


end = time.time()
print((end - start))

测试数据如下

1.067184686660770.9823968410491940.9181206226348880.9633324146270750.9930140972137450.984809732437134
0.361033439636230.383006095886230.2793052196502690.3463804721832280.3789763450622560.349740314483643
2.914806604385382.904453516006472.816029071807862.874388217926032.879529476165772.8778413772583

明显采用第一种方法速度将是大于一倍

==========修改

在代码段

k=0
while k < 10000:
    k+=1
    for i in list1:
        for n in list:
            try:
                object_listnnnn = list.index(i)
                object_listnnnn = i

            except:
                object_listnnnn = i

中,list.index无需遍历list,将list改为n此遍历才起作用,所以将代码更改如下

tps=0
while tps <5 :
    tps +=1
    #列表查找检测


    import time
    list=[1,2,3,4,5,6,7]
    list1=[1,2,3,4,5,6,7,8,9,10,11,12,13,14]

    start = time.time()

    k=0
    while k < 10000:
        k+=1
        for i in list1:
            for n in list:
                if i == n :
                    object_listnnnn = i
                else:
                    object_listnnnn = i



    end = time.time()
    print((end - start))
    start = time.time()

    k=0
    while k < 10000:
        k+=1
        for i in list1:
            try:
                object_listnnnn = list.index(i)
                object_listnnnn = i
            except:
                object_listnnnn = i



    end = time.time()
    print((end - start))
    start = time.time()



    k=0
    while k < 10000:
        k+=1
        for i in list1:
            for n in list:
                try:
                    object_listnnnn = n.index(i)
                    object_listnnnn = i

                except:
                    object_listnnnn = i

    end = time.time()
    print((end - start))



性能测试如下

平均
0.984809732437134
0.349740314483643
2.8778413772583

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值