timeit模塊
timeit模塊可以用來測試一小段Python代碼的執(zhí)行速度。
class timeit.Timer(stmt='pass', setup='pass', timer=
Timer是測量小段代碼執(zhí)行速度的類。
stmt參數(shù)是要測試的代碼語句(statment);
setup參數(shù)是運(yùn)行代碼時需要的設(shè)置;
timer參數(shù)是一個定時器函數(shù),與平臺有關(guān)。
timeit.Timer.timeit(number=1000000)
Timer類中測試語句執(zhí)行速度的對象方法。number參數(shù)是測試代碼時的測試次數(shù),默認(rèn)為1000000次。方法返回執(zhí)行代碼的平均耗時,一個float類型的秒數(shù)。
List的操作測試
import
timeit
def
test1
(
)
:
'''
通過append方法添加數(shù)據(jù)
'''
li
=
[
]
for
i
in
range
(
10000
)
:
li
.
append
(
i
)
def
test5
(
)
:
'''
通過insert方法添加數(shù)據(jù)
'''
li
=
[
]
for
i
in
range
(
10000
)
:
li
.
insert
(
0
,
i
)
def
test2
(
)
:
'''
通過列表相加添加數(shù)據(jù)
'''
li
=
[
]
for
i
in
range
(
10000
)
:
li
=
li
+
[
i
]
def
test3
(
)
:
'''
通過推導(dǎo)式添加數(shù)據(jù)
'''
li
=
[
i
for
i
in
range
(
10000
)
]
def
test4
(
)
:
'''
通過list方法添加數(shù)據(jù)
'''
li
=
list
(
range
(
10000
)
)
'''
因為timeit測試是另外開一個模塊測試,所以第二參數(shù)中,需要導(dǎo)入要測試函數(shù)
當(dāng)前模塊的模塊名稱為= __main__
'''
timer1
=
timeit
.
Timer
(
'test1()'
,
'from __main__ import test1'
)
timer5
=
timeit
.
Timer
(
'test5()'
,
'from __main__ import test5'
)
timer2
=
timeit
.
Timer
(
'test2()'
,
'from __main__ import test2'
)
timer3
=
timeit
.
Timer
(
'test3()'
,
'from __main__ import test3'
)
timer4
=
timeit
.
Timer
(
'test4()'
,
'from __main__ import test4'
)
# 測試100次
print
(
'append :%f'
%
timer1
.
timeit
(
number
=
100
)
)
print
(
'insert :%f'
%
timer5
.
timeit
(
number
=
100
)
)
print
(
'[]+[] :%f'
%
timer2
.
timeit
(
number
=
100
)
)
print
(
'[i for] :%f'
%
timer3
.
timeit
(
number
=
100
)
)
print
(
'list() :%f'
%
timer4
.
timeit
(
number
=
100
)
)
''' 輸出
append :0.171303
insert :2.461631
[]+[] :15.466849
[i for] :0.049168
list() :0.029723
'''
輸出結(jié)果:
append
:
0.171303
insert
:
2.461631
[
]
+
[
]
:
15.466849
[
i
for
]
:
0.049168
list
(
)
:
0.029723
結(jié)論
來個列表相加[] + []操作是非常耗費(fèi)時間
insert操作比較耗費(fèi)時間
pop測試
x
=
range
(
2000000
)
pop_zero
=
Timer
(
"x.pop(0)"
,
"from __main__ import x"
)
print
(
"pop_zero "
,
pop_zero
.
timeit
(
number
=
1000
)
,
"seconds"
)
x
=
range
(
2000000
)
pop_end
=
Timer
(
"x.pop()"
,
"from __main__ import x"
)
print
(
"pop_end "
,
pop_end
.
timeit
(
number
=
1000
)
,
"seconds"
)
# ('pop_zero ', 1.9101738929748535, 'seconds')
# ('pop_end ', 0.00023603439331054688, 'seconds')
測試pop操作:從結(jié)果可以看出,pop最后一個元素的效率遠(yuǎn)遠(yuǎn)高于pop第一個元素
list內(nèi)置操作的時間復(fù)雜度
操作 | 時間復(fù)雜度 | 描述 |
---|---|---|
index[] | O(1) | index[索引] 查找操作 |
index賦值 | O(1) | index[索引] = 值 賦值操作 |
append | O(1)) | append追加操作 |
pop() | O(1) | pop()方法操作的 |
pop(i) | O(n) | n為操作list的size |
insert(i,item) | O(n) | n為list的size |
del操作 | O(n) | n為list的size |
iteration | O(n) | n為list的size. 遍歷操作 |
contains | O(n) | n為list的size |
dict內(nèi)置操作的時間復(fù)雜度
操作 | 時間復(fù)雜度 | 描述 |
---|---|---|
copy | O(n) | 淺拷貝操作 n為dict的size |
get item | O(1) | 獲取字典值 |
set item | O(1)) | 這是字典值 |
delete item | O(1) | 刪除字典值 |
iteration | O(n) | n為dictt的size. 遍歷操作 |
contains | O(1)) | n為list的size |
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
