python in 操作耗时测试和性能分析

python in 操作耗时测试和性能分析

这里主要是对于序列:list set 进行测试,其中用到的是timeit 计时,采用随机样本进行序列的构造。

测试代码:

# coding=utf8
__author__ = 'lfc'

import timeit
import random

seq_len = 4  # 10 ** 4

x = random.sample([i for i in range(10 ** 6)], 10 ** seq_len)
y = set(x)
z = sorted(x)

n = 320170

c = 1000


def fx():
    return n in x


def fy():
    return n in y


def fz():
    return n in z


def fn():
    return set(x)


def fs():
    return sorted(x)


print "预处理操作 %d 次用时:" % c
print "set it:%.24f" % timeit.timeit(fn, number=c)
print "sorted it:%.24f" % timeit.timeit(fs, number=c)
print ""
print "in 操作 %d 次用时:" % c
print "list: %.24f" % timeit.timeit(fx, number=c)
print "set: %.24f" % timeit.timeit(fy, number=c)
print "sorted list: %.24f" % timeit.timeit(fz, number=c)

分析:

    结论: 对set 进行 in 判断 ,与序列长度无关
               对于list 进行 in 操作, 耗费时间与随长度增加而增加与N相关
               对于排过序的in 操作时间与序列长度N线性相关, 并且排序的时间最好也是log n

               并且 ,在将list 转化为 list 时所耗费时间却是更长,
               所以具体选用的方式:
               对于已经有的数据结果,如果是单次in操作, 则直接进行 ,
               如果需要多次进行in操作,且次数大于3(此处是以测试为例)倍 list 长度, 建议提前将其转化为set,再次进行in 操作


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值