對Python中常用迭代方法進行計時

2021-06-14 02:44:15 字數 2717 閱讀 5516

python是個好東西,但奈何時間不夠用啊,路上坐地鐵也未必有座兒,於是乎站著寫**的不只有那些比較潮流的辦公室有,我也是其中一員,不過我是在運動過程中寫**,需要兩腳站穩保持中立姿態,同時還要注意不能妨礙他人,嗯,總之是技術活兒,誰讓咱是技術人員呢。扯完廢話,把今天在路上寫的乙個python小檔案貼出來,用來對比python下各種迭代方法的耗時。因為比較簡單,所以直接貼出timerseqs.py檔案的**:

#!usrr/bin/env python

#file timerseqs.py

import time, sys

reps=1000

size=10000

def tester(func,*args):

starttime=time.time()

for i in range(reps):

func(*args)

elapsed=time.time()-starttime

return elapsed

#end def

def forstatement():

res=

for x in range(size):

#end def

def listcomprehension():

res=[abs(x) for x in range(size)]

#end def

def mapfunction():

res=map(abs,range(size))

#end def

def generatorexpression():

res=list(abs(x) for x in range(size))

#end def

print sys.version

tests=(forstatement,listcomprehension,mapfunction,generatorexpression)

for testfunc in tests:

print testfunc.__name__.ljust(20),'=>',tester(testfunc)

那麼測試的結果如下圖所示:

這個指令碼測試了所有構造結果列表可能的方法,每乙個都依次執行了一千萬步,也就是說,這四個測試分別建立了一千次結果列表,每個列表中又含有一萬個元素。在我的平板電腦上測試的結果,跟我在學習手冊上看到的略有出入,但是差距不是太離譜,執行結果顯示:列表解析大概比for迴圈語句快兩倍,而map在對映像abs這樣兒的內建函式時比列表解析要稍微快一些。

但是,當我們改變這段**的時候呢?如果我們在每個迭代中執行乙個真正的操作,例如,我們將**做如下改動,在迭代中新增乙個加法運算:

#!usrr/bin/env python

#file timerseqs.py

import time, sys

reps=1000

size=10000

def tester(func,*args):

starttime=time.time()

for i in range(reps):

func(*args)

elapsed=time.time()-starttime

return elapsed

#end def

def forstatement():

res=

for x in range(size):

#end def

def listcomprehension():

res=[x+10 for x in range(size)]

#end def

def mapfunction():

res=map(lambda x:x+10,range(size))

#end def

def generatorexpression():

res=list(x+10 for x in range(size))

#end def

print sys.version

tests=(forstatement,listcomprehension,mapfunction,generatorexpression)

for testfunc in tests:

print testfunc.__name__.ljust(20),'=>',tester(testfunc)

那麼,我們再來執行一下看下效果:

此時,map反而變得更慢,儘管可能for迴圈語句中**更多了。

從這個指令碼中,我們對python**的效能分析也有了初步的乙個了解,因為python的直譯器的優化是相當內在的,所以我們很難猜測出哪一種方法的效能是最佳的,但我們所能做到的就是使用python,計算**的執行時間。在這種情況下,我們所能確定的就是,對於目前的python,map呼叫中使用使用者定義的函式至少會導致map慢兩倍以上,而列表解析對這樣兒的運算處理最快。

同時還有一點,就是我們在編寫python**的時候,效能未必就是最優先考慮的,首先要為可讀性和簡潔性的標準而努力,如果有必要的話,之後再進行優化。

2023年05月03日,eric.tang 記

vue中常用的陣列迭代方法

學習陣列迭代方法 every 迭代陣列每一項,每項都符合條件的才返回true,反之false some 迭代陣列每一項,只要有一項符合條件就返回true,如果全部不符合才返回false map 迭代陣列每一項,可以給特定條件會返回重新組成新的陣列 filter 迭代陣列每一項,可以給特定的條件進行篩...

Python中常用的內建方法

常用的內建方法 1.min求最小值 求最小值 min 3,4 32.max求最大值 求最大值 max 3,4,5 5 sum range 10 453.sum求和 1 100求和 sum range 1,101 5050 1 100奇數求和 sum range 1,101,2 2500 1 100偶...

python中常用的內建方法

以下所有的實操全在redhat7.3真機上pycharm 列舉 enumerate 函式 描述 enumerate 函式用於將乙個可遍歷的資料物件 如列表 元組或字串 組合為乙個索引序列,同時列出資料和資料下標,一般用在 for 迴圈當中。語法以下是 enumerate 方法的語法 enumerat...