廢話環節
折騰了兩週的Python基礎算法,博主感覺對於我一個數據結構小白來說得到了很好反饋,這周吶博主主要研究了一下數據結構底層知識算法時長評測,進行了總結,近期都會發布,本篇博客,博主打算通過最基本的Python語法中的列表(list),講透算法時長,從廣義上評價一個算法的優劣,(在此申明本篇博客僅代表我的個人觀點,希望不要引來喫瓜羣衆圍毆),更希望大家以此爲例,不斷拓展。喫透以後,能爲自己的程序寫一個評判框架。
測試環境
①Pycharm
②Python中自帶的timeit包
代碼呈現
很基礎的[list]知識希望大家細細對比
①
def test01():
list = []
for i in range(1000):
list += [i]
return list
test01()
②
def test02():
list2 = []
for i in range(1000):
list2.append(i)
return list2
test02()
③
def test03():
return [i for i in range(1000)]
test03()
④
def test04():
list4 = list(range(1000))
return list4
test04()
四塊代碼最後達到的目標是相同的,大家盲猜一下哪個代碼運行時間最短
① ② ③ ④
猜的差不多了,保留你心中的答案,接着往下看,我們讓計算機爲大家揭祕
貼出完整代碼,套用框架進行測試
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time : 2020/3/17 13:17
# @Author : HaoXuan
# @File : 01_算法時長.py
# @Software: PyCharm
from timeit import Timer
def test01():
list = []
for i in range(1000):
list += [i]
return list
# test01()
def test02():
list2 = []
for i in range(1000):
list2.append(i)
return list2
def test03(): #列表推導式
return [i for i in range(1000)]
def test04():
list4 = list(range(1000))
return list4
if __name__ == "__main__":
timer = Timer('test01()', 'from __main__ import test01')
t1 = timer.timeit(1000)
print(t1)
timer = Timer('test02()', 'from __main__ import test02')
t2 = timer.timeit(1000)
print(t2)
timer = Timer('test03()', 'from __main__ import test03')
t3 = timer.timeit(1000)
print(t3)
timer = Timer('test04()', 'from __main__ import test04')
t4 = timer.timeit(1000)
print(t4)
運行後的結果如下:
經計算機測試,運行時間最短的應該是第④段代碼掌聲送給選④的鐵子
博主一開始猜的是③列表推導式,與生活一樣往往自己想的結果不一定都是正確的,實踐是檢驗真理的唯一標準,本篇博客整體較簡單,廢話頗多,希望大家汲取其中有用的部分吞食,這篇博客也到此結束了。
學習的時間是短暫的,歡迎大家捧場下一篇博客棧(Stack),最通俗的語言講透棧