天天看點

python in 操作耗時測試和性能分析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 操作