最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python內(nèi)置數(shù)據(jù)類型list各方法的性能測(cè)試過程解析

 更新時(shí)間:2020年01月07日 11:44:08   作者:千里駿骨  
這篇文章主要介紹了Python內(nèi)置數(shù)據(jù)類型list各方法的性能測(cè)試過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了Python內(nèi)置數(shù)據(jù)類型list各方法的性能測(cè)試過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

測(cè)試環(huán)境

本文所涉及的代碼均在MacOS系統(tǒng)與CentOS7下測(cè)試,使用的Python版本為3.6.8。

測(cè)試模塊

測(cè)試用的模塊是Python內(nèi)置的timeit模塊:

timeit模塊可以用來測(cè)試一小段Python代碼的執(zhí)行速度。

Timer類

class timeit.Timer(stmt='pass', setup='pass', timer=<timer function>)

Timer是測(cè)量小段代碼執(zhí)行速度的類。

stmt參數(shù)是要測(cè)試的代碼語(yǔ)句(statment);

setup參數(shù)是運(yùn)行代碼時(shí)需要的設(shè)置;

timer參數(shù)是一個(gè)定時(shí)器函數(shù),與平臺(tái)有關(guān)。

Timer類的timeit方法

timeit.Timer.timeit(number=1000000)

Timer類中測(cè)試語(yǔ)句執(zhí)行速度的對(duì)象方法。number參數(shù)是測(cè)試代碼時(shí)的測(cè)試次數(shù),默認(rèn)為1000000次。方法返回執(zhí)行代碼的平均耗時(shí),一個(gè)float類型的秒數(shù)。

列表內(nèi)置方法的性能測(cè)試

我們知道,生成一個(gè)列表可以使用列表生成式或者append、insert、extend這些方法,現(xiàn)在我們來看一下這些方法的執(zhí)行效率:

from timeit import Timer


def test_list():
  lst = list(range(1000))

def test_generation():
  lst = [i for i in range(1000)]


def test_append():
  lst = []
  for i in range(1000):
    lst.append(i)

def test_add():
  lst = []
  for i in range(1000):
    lst += [i]

# 在列表的頭部insert
def test_insert_zero():
  lst = []
  for i in range(1000):
    lst.insert(0,i)

# 在列表的尾部insert
def test_insert_end():
  lst = []
  for i in range(1000):
    lst.insert(-1,i)

def test_extend():
  lst = []
  lst.extend(list(range(1000)))


t1 = Timer("test_list()","from __main__ import test_list")
print(f"test_list takes {t1.timeit(number=1000)} seconds")

t2 = Timer("test_generation()","from __main__ import test_generation")
print(f"test_generation takes {t2.timeit(number=1000)} seconds")

t3 = Timer("test_append()","from __main__ import test_append")
print(f"test_append takes {t3.timeit(number=1000)} seconds")

t4 = Timer("test_add()","from __main__ import test_add")
print(f"test_add takes {t4.timeit(number=1000)} seconds")

t5 = Timer("test_insert_zero()","from __main__ import test_insert_zero")
print(f"test_insert_zero takes {t5.timeit(number=1000)} seconds")

t6 = Timer("test_insert_end()","from __main__ import test_insert_end")
print(f"test_insert_end takes {t6.timeit(number=1000)} seconds")

t7 = Timer("test_extend()","from __main__ import test_extend")
print(f"test_extend takes {t7.timeit(number=1000)} seconds")

我們先看看在MacOS系統(tǒng)下,執(zhí)行上面這段代碼的結(jié)果:

"""
test_list takes 0.012904746999993222 seconds
test_generation takes 0.03530399600003875 seconds
test_append takes 0.0865129750000051 seconds
test_add takes 0.08066114099983679 seconds
test_insert_zero takes 0.30594958500023495 seconds
test_insert_end takes 0.1522782449992519 seconds
test_extend takes 0.017534753999825625 seconds
"""

我們可以看到:直接使用list方法強(qiáng)轉(zhuǎn)的效率最高,其次是使用列表生成式,而append與直接加的方式緊隨其后并且二者的效率相當(dāng);insert方法的執(zhí)行效率最低——并且從頭插入的效率要低于從尾部插入的效率!最后我們將強(qiáng)轉(zhuǎn)的列表使用extend方法放入到新的列表中的過程效率并沒有減少多少。

然后試試在Linux系統(tǒng)下的執(zhí)行結(jié)果:

列表pop方法的性能測(cè)試

pop可以從第0各位置刪除元素,也可以從最后位置刪除元素(默認(rèn)刪除最后面的元素),現(xiàn)在我們來測(cè)試一下兩種從不同位置刪除元素的性能對(duì)比:

from timeit import Timer

def test_pop_zero():
  lst = list(range(2000))
  for i in range(2000):
    lst.pop(0)


def test_pop_end():
  lst = list(range(2000))
  for i in range(2000):
    lst.pop()
t1 = Timer("test_pop_zero()","from __main__ import test_pop_zero")
print(f"test_pop_zero takes {t1.timeit(number=1000)} seconds")

t2 = Timer("test_pop_end()","from __main__ import test_pop_end")
print(f"test_pop_end takes {t2.timeit(number=1000)} seconds")

在MacOS下程序的執(zhí)行結(jié)果為:

test_pop_zero takes 0.5015365449999081 seconds

test_pop_end takes 0.22170215499954793 seconds

然后我們來試試Linux系統(tǒng)中的執(zhí)行結(jié)果:

可以看到:從列表的尾部刪除元素的效率要比從頭部刪除的效率高很多!

關(guān)于列表insert方法的一個(gè)小坑

如果想使用insert方法生成一個(gè)列表[0,1,2,3,4,5]的話(當(dāng)然使用insert方法效率會(huì)低很多,建議使用其他的方法)會(huì)有一個(gè)這樣的問題,在此記錄一下:

def test_insert():
  lst = []
  for i in range(6):
    lst.insert(-1,i)
    print(lst)

test_insert()

結(jié)果竟然是這樣的——第一個(gè)元素竟然一直在最后!

[0]
[1, 0]
[1, 2, 0]
[1, 2, 3, 0]
[1, 2, 3, 4, 0]
[1, 2, 3, 4, 5, 0]

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Pycharm 如何設(shè)置HTML文件自動(dòng)補(bǔ)全代碼或標(biāo)簽

    Pycharm 如何設(shè)置HTML文件自動(dòng)補(bǔ)全代碼或標(biāo)簽

    這篇文章主要介紹了Pycharm 如何設(shè)置HTML文件自動(dòng)補(bǔ)全代碼或標(biāo)簽,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 基于Python新建用戶并產(chǎn)生隨機(jī)密碼過程解析

    基于Python新建用戶并產(chǎn)生隨機(jī)密碼過程解析

    這篇文章主要介紹了基于Python新建用戶并產(chǎn)生隨機(jī)密碼過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 8個(gè)實(shí)用的Python程序你知道幾個(gè)

    8個(gè)實(shí)用的Python程序你知道幾個(gè)

    這篇文章主要為大家詳細(xì)介紹了8個(gè)實(shí)用的Python程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>
    2022-02-02
  • Python使用OpenCV對(duì)圖像進(jìn)行縮放功能

    Python使用OpenCV對(duì)圖像進(jìn)行縮放功能

    這篇文章主要介紹了Python使用OpenCV對(duì)圖像進(jìn)行縮放功能,文中給大家提到了兩種調(diào)用方式及OpenCV中pryUp和pryDown的用法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • 如何利用python多線程爬取天氣網(wǎng)站圖片并保存

    如何利用python多線程爬取天氣網(wǎng)站圖片并保存

    最近做個(gè)天 氣方面的APP需要用到一些天氣數(shù)據(jù),所以下面這篇文章主要給大家介紹了關(guān)于如何利用python多線程爬取天氣網(wǎng)站圖片并保存的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-11-11
  • Python中的fileinput模塊的簡(jiǎn)單實(shí)用示例

    Python中的fileinput模塊的簡(jiǎn)單實(shí)用示例

    這篇文章主要介紹了Python中的fileinput模塊實(shí)用示例,文中的示例是使用其來便利硬盤分區(qū)下的文本文件并打印其中行的長(zhǎng)度,需要的朋友可以參考下
    2015-07-07
  • python正則分析nginx的訪問日志

    python正則分析nginx的訪問日志

    最近工作中遇到一個(gè)需求,是要分析nginx的訪問日志,覺著利用python來實(shí)現(xiàn)比較合適,所以下面這篇文章主要介紹了利用python正則如何分析nginx的訪問日志,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • python按照行來讀取txt文件全部?jī)?nèi)容(去除空行處理掉\t,\n后以列表方式返回)

    python按照行來讀取txt文件全部?jī)?nèi)容(去除空行處理掉\t,\n后以列表方式返回)

    這篇文章主要介紹了python按照行來讀取txt文件全部?jī)?nèi)容 ,去除空行,處理掉\t,\n后,以列表方式返回,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • 詳解python如何提取瀏覽器中保存的網(wǎng)站登錄用戶名密碼

    詳解python如何提取瀏覽器中保存的網(wǎng)站登錄用戶名密碼

    很多瀏覽器都貼心地提供了保存用戶密碼功能,用戶一旦開啟,就不需要每次都輸入用戶名、密碼,非常方便,作為python腳本,能否拿到用戶提前保存在瀏覽器中的用戶名密碼,用以自動(dòng)登錄呢,下面我們就來看看吧
    2023-08-08
  • 詳解python開發(fā)環(huán)境搭建

    詳解python開發(fā)環(huán)境搭建

    這篇文章主要介紹了詳解python開發(fā)環(huán)境搭建 ,記錄一下過程,方便自己以后配置,也方便正在學(xué)習(xí)中的同事配置他們的環(huán)境。
    2016-12-12

最新評(píng)論

莎车县| 荔波县| 星座| 监利县| 个旧市| 尤溪县| 察雅县| 繁峙县| 泽库县| 陇川县| 华容县| 伊金霍洛旗| 永新县| 凉城县| 贵州省| 将乐县| 高台县| 富源县| 星子县| 嘉义市| 阳新县| 顺义区| 名山县| 海门市| 白水县| 建湖县| 巴南区| 淳安县| 桂东县| 寻甸| 江西省| 天柱县| 襄垣县| 小金县| 屏东市| 衡阳县| 曲麻莱县| 德兴市| 汽车| 平陆县| 西丰县|