Python資料結構效能分析

2022-05-08 15:00:12 字數 2729 閱讀 4124

告訴大家python列表和字典操作的 大o 效能。然後我們將做一些基於時間的實驗來說明每個資料結構的花銷和使用這些資料結構的好處

方式一:

deftest01():

alist =

for i in range(1000):

alist +=i

return

alist

方式二:

deftest02():

alist =

for i in range(1000):

return

alist

方式三:

deftest03():

return [i for i in range(1000)]

方式四:

deftest04():

alist = list(range(1000))

return alist

-下面我們來使用timeit模組來計算上述方式的平均執行時長

- timeit 模組:該模組可以用來測試一段python**的執行速度/時長

- timer類:該類是timeit模組中專門用於測試python**的執行速度/時長。原型為:class timeit.timer(stmt='pass',setup='pass')。

- stmt引數:表示即將進行測試的**塊語句。

- setup引數:執行**塊語句時所需要的設定。

- timeit函式:timeit.timer.timeit(number=100000),該函式返回**塊語句執行number次的平均耗時。

- 案例:

from timeit import

timer

#被測試的**塊

deffunc(n):

sum =0

for i in range(0,100):

sum +=i

print

(sum)

if__name__ == "

__main__":

#引數2:因為引數1必須為字串且表示的是即將被測試**塊函式的名字,因此引數2必須設定為執行引數1函式所需的設定

t = timer('

func(10)

','from __main__ import func')

print(t.timeit(1000))

- timeit模組來計算上述四種方式的平均時長是多少

from timeit import

timer

deftest01():

alist =

for i in range(1000):

alist +=[i]

return

alist

deftest02():

alist =

for i in range(1000):

return

alist

deftest03():

return [i for i in range(1000)]

deftest04():

alist = list(range(1000))

return

alist

if__name__ == '

__main__':

timer = timer('

test01()

','from __main__ import test01')

t1 = timer.timeit(1000)

print

(t1)

timer2 = timer('

test02()

','from __main__ import test02')

t2 = timer.timeit(1000)

print

(t2)

timer3 = timer('

test03()

','from __main__ import test03')

t3 = timer.timeit(1000)

print

(t3)

timer4 = timer('

test04()

','from __main__ import test04')

t4 = timer.timeit(1000)

print

(t4)

#執行結果:

0.060362724815831825

0.058856628773583

0.05833806495468252

0.05742018511486435

注意:你上面看到的時間都是包括實際呼叫函式的一些開銷,但我們可以假設函式呼叫開銷在四種情況下是相同的,所以我們仍然得到的是有意義的比較。因此,拼接字串操作需要 6.03毫秒並不準確,而是拼接字串這個函式需要 6.03毫秒。你可以測試呼叫空函式所需要的時間,並從上面的數字中減去它。剩下的基於列表的其他操作大家也可以使用timeit進行平均耗時的測量計算。

- python 中第二個主要的資料結構是字典。你可能記得,字典和列表不同,你可以通過鍵而不是位置來訪問字典中的專案。

- 字典的時間複雜度:

基礎資料結構效能對比學習筆記

記憶體分配 在記憶體中分配一段連續的空間 特點 需要再定義時就知道分配空間的大小 使用 用於預先就已知需要的最大儲存空間的情況 2 vector 記憶體分配 在記憶體中分配一段連續的空間 實現 內部實際通過管理乙個陣列指標實現 特點 插入的元素如果超出分配的記憶體空間,會自動劃分一段更大的記憶體空間...

python資料分析 資料結構

0117 先搭框架,待完善!列表 2020 is 2019 was 所以,見到下面這樣的資料也不要覺得驚奇 它也是列表 data ohio ohio ohio nevada nevada 2000 2001 2002 2001 2002 1.5 1.7 3.6 2.4 2.9 所以,後來有了專門用來...

python資料結構的效能測試

import timeit def t1 l for i in range 10000 l l i def t2 l for i in range 10000 def t3 l i for i in range 10000 def t4 l list range 10000 def t5 l for...