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

Python中數(shù)值比較的效率

 更新時(shí)間:2023年01月28日 15:33:21   作者:風(fēng)華明遠(yuǎn)  
這篇文章主要介紹了Python中數(shù)值比較的效率,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Python數(shù)值比較的效率

Python 數(shù)值比較運(yùn)算效率:>,<,==,!=,>=和<=

python數(shù)值比較運(yùn)算有6種,分別為>,<,==,!=,>=和 <=。他們的運(yùn)算效率如何?采用哪種方式最高效?本文通過使用timeit來測(cè)試比較運(yùn)算的效率。

程序如下:

import timeit                                                       
                                                                    
def func1():                                                        
    for i in range(100000):                                         
        if i > 0:                                                   
            k = 2                                                   
                                                                    
def func2():                                                        
    for i in range(100000):                                         
        if i < 0:                                                   
            k = 2                                                   
                                                                    
def func3():                                                        
    for i in range(100000):                                         
        if i == 0:                                                  
            k = 2                                                   
                                                                    
def func4():                                                        
    for i in range(100000):                                         
        if i != 0:                                                  
            k = 2                                                   
                                                                    
def func5():                                                        
    for i in range(100000):                                         
        if i >= 0:                                                  
            k = 2                                                   
                                                                    
def func6():                                                        
    for i in range(100000):                                         
        if i <= 0:                                                  
            k = 2                                                   
                                                                    
                                                                    
                                                                    
if __name__ == '__main__':                                          
    func1()                                                         
    func=[func1,func2,func3,func4,func5,func6]                      
    op = [">","<","==","!=",">=","<="]                              
    for j in range(6):                                              
        v = 0                                                       
        timer = timeit.Timer(func[j])                               
        v+= timer.timeit(number=1000)                               
        print(op[j],":",v)                                          

這是只有if語句的情況,結(jié)果如下:

比較運(yùn)算所用時(shí)間
>3.2038074
<2.7034741
==2.6940471000000006
!=3.285996800000001
>=3.205210300000001
<=2.6961838999999994

加上else語句則:

比較運(yùn)算所用時(shí)間
>3.2270024
<3.2400326
==3.2511219999999996
!=3.1877201999999993
>=3.2120345000000015
<=3.2339978999999985

一般情況下,第一個(gè)分支比較節(jié)省時(shí)間。第二個(gè)分支會(huì)耗時(shí)稍微多一些。

不同python實(shí)現(xiàn)的效率比較

1.取出內(nèi)層容器的多個(gè)值

如果要從嵌套的列表中獲取內(nèi)層列表每個(gè)索引對(duì)應(yīng)的最大(或最小值),有兩種方法:

import time
import random
a = [[random.randint(0, 1000) for i in range(10)] for j in range(100000)]

def method_x(a):
?? ?"""每個(gè)索引位置一個(gè)生成器表達(dá)式"""
? ? begin = time.time()
? ? b = min(i[0] for i in a)
? ? c = min(i[1] for i in a)
? ? d = min(i[2] for i in a)
? ? e = min(i[3] for i in a)
? ? f = min(i[4] for i in a)
? ? g = min(i[5] for i in a)
? ? h = min(i[6] for i in a)
? ? i = min(i[7] for i in a)
? ? j = min(i[8] for i in a)
? ? k = min(i[9] for i in a)
? ? print(time.time()-begin)

def method_y(a):
?? ?"""只循環(huán)一次算出各個(gè)索引對(duì)應(yīng)的值"""
? ? begin = time.time()
? ? b,c,d,e,f,g,h,i,j,k = 100,100,100,100,100,100,100,100,100,100
? ? for t in a:
? ? ? ? b = min(t[0], b)
? ? ? ? c = min(t[1], c)
? ? ? ? d = min(t[2], d)
? ? ? ? e = min(t[3], e)
? ? ? ? f = min(t[4], f)
? ? ? ? g = min(t[5], g)
? ? ? ? h = min(t[6], h)
? ? ? ? i = min(t[7], i)
? ? ? ? j = min(t[8], j)
? ? ? ? k = min(t[9], k)
? ? print(time.time()-begin)

結(jié)果

>>> method_x(a*10)
1.1728243827819824
>>> method_y(a*10)
2.1234960556030273

2.字符串去掉結(jié)尾(開頭)字符

去除字符串結(jié)尾字符,批量操作的話,一般使用 rstrip() 函數(shù),但是這個(gè)函數(shù)效率不如直接索引快。

import random
import time
# a為10萬個(gè)長度是11位的字符串列表;b為10萬長度為9位的字符串列表;
a = [f'{random.randint(10,100)}xxxyyyzzz' for i in range(100000)]
b = [f'{random.randint(100000,110000)}xyz' for i in range(100000)]
def test1(a, str_cut):?? ?# replace
? ? b = time.time()
? ? c = [i.replace(str_cut, '') for i in a]
? ? print(time.time()-b)

def test2(a, str_cut):?? ?# rstrip()
? ? b = time.time()
? ? c = [i.rstrip(str_cut) for i in a]
? ? print(time.time()-b)

def test3(a, str_cut):?? ?# 索引
? ? b = time.time()
? ? x =len(str_cut)
? ? c = [i[:-x] for i in a]
? ? print(time.time()-b)

結(jié)果比較,當(dāng)想去掉字符長度大于保留的長度的時(shí)候,rstrip() 效率趨近于 replace() , 想去掉的字符長度小于保留部分時(shí),rstrip() 趨近于直接索引。

>>> test1(a*10, 'xxxyyyzzz')
0.2882061004638672
>>> test2(a*10, 'xxxyyyzzz')
0.2662053108215332
>>> test3(a*10, 'xxxyyyzzz')
0.16613411903381348

>>> test1(b*10, 'xyz')
0.2721879482269287
>>> test2(b*10, 'xyz')
0.1911303997039795
>>> test3(b*10, 'xyz')
0.1501011848449707

3. in 操作要用集合

按一樣的邏輯寫了兩版程序,運(yùn)行時(shí)間確差了好多,一步一步找,發(fā)現(xiàn)是 in 判斷后面用的容器類型不一樣。

a = range(0, 100000)
b = list(a)
c = set(a)

def test(a):
? ? t = time.time()
? ? c = 0
? ? for i in range(0, 100000, 13):
? ? ? ? if i in a:
? ? ? ? ? ? c += 1
? ? print(c)
? ? print(time.time()-t)

測(cè)試時(shí)間,差距極大:

>>> test(b)
7693
5.649996280670166
>>> test(a)
7693
0.0019681453704833984

每次判斷之前把列表轉(zhuǎn)換為集合,能改進(jìn)運(yùn)行的效率:

def test(a):
? ? t = time.time()
? ? c = 0
? ? a = set(a)
? ? for i in range(0, 100000, 13):
? ? ? ? if i in a:
? ? ? ? ? ? c += 1
? ? print(c)
? ? print(time.time()-t)

>>> test(b)
7693
0.005988359451293945

4. 內(nèi)置的max()效率低

def getmax(a, b):
?? ?if a >= b:
?? ??? ?return a
?? ?return b

定義一個(gè)求最大值的函數(shù),再用random模塊提前創(chuàng)造一個(gè)長度100的data_list用于測(cè)試(random本身耗時(shí)高,會(huì)讓比較效果不明顯)。

def main():
? ? t = time.time()
? ? for a, b in data_list*10000:
? ? ? ? max(a, b)
? ? print(time.time()-t)


def main2():
? ? t = time.time()
? ? for a, b in data_list*10000:
? ? ? ? getmax(a, b)
? ? print(time.time()-t)

自定義的函數(shù)比使用內(nèi)置的max()快了近一倍。

>>> main1()
0.2231442928314209
>>> main2()
0.14011740684509277

計(jì)算三個(gè)數(shù)中的最大值時(shí)也是這樣。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python字符串大小寫轉(zhuǎn)換的三種方法

    python字符串大小寫轉(zhuǎn)換的三種方法

    本文主要介紹了python字符串大小寫轉(zhuǎn)換的三種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python Grid使用和布局詳解

    Python Grid使用和布局詳解

    這篇文章主要為大家詳細(xì)介紹了Python Grid使用和布局,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Python常用工具之音頻調(diào)整音量

    Python常用工具之音頻調(diào)整音量

    這篇文章主要介紹一個(gè)可以將音頻提升音量的python常用工具,代碼具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2021-11-11
  • Python pymongo模塊常用操作分析

    Python pymongo模塊常用操作分析

    這篇文章主要介紹了Python pymongo模塊常用操作,結(jié)合實(shí)例形式分析了pymongo模塊的導(dǎo)入、連接MongoDB數(shù)據(jù)以及插入、更新、刪除、查詢等操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-09-09
  • Python實(shí)現(xiàn)的根據(jù)IP地址計(jì)算子網(wǎng)掩碼位數(shù)功能示例

    Python實(shí)現(xiàn)的根據(jù)IP地址計(jì)算子網(wǎng)掩碼位數(shù)功能示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的根據(jù)IP地址計(jì)算子網(wǎng)掩碼位數(shù)功能,涉及Python數(shù)值運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • 為Python程序添加圖形化界面的教程

    為Python程序添加圖形化界面的教程

    這篇文章主要介紹了為Python程序添加圖形化界面的教程,圖形化界面編程是開發(fā)Python本地應(yīng)用的必備,需要的朋友可以參考下
    2015-04-04
  • Python實(shí)現(xiàn)自動(dòng)化網(wǎng)頁操作步驟

    Python實(shí)現(xiàn)自動(dòng)化網(wǎng)頁操作步驟

    這篇文章主要介紹Python如何實(shí)現(xiàn)自動(dòng)化網(wǎng)頁操作,文中有詳細(xì)的流程步驟和代碼示例,對(duì)我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-06-06
  • 關(guān)于Python的json字符串與json模塊解讀

    關(guān)于Python的json字符串與json模塊解讀

    這篇文章主要介紹了關(guān)于Python的json字符串與json模塊解讀,JSON采用完全獨(dú)立于語言的文本格式,但是也使用了類似于C語言家族的習(xí)慣(包括C,?C++,?C#,?Java,?JavaScript,?Perl,?Python等),這些特性使JSON成為理想的數(shù)據(jù)交換語言,需要的朋友可以參考下
    2023-07-07
  • Python與C/C++的相互調(diào)用案例

    Python與C/C++的相互調(diào)用案例

    這篇文章主要介紹了Python與C/C++的相互調(diào)用案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 創(chuàng)建Django項(xiàng)目圖文實(shí)例詳解

    創(chuàng)建Django項(xiàng)目圖文實(shí)例詳解

    這篇文章主要介紹了創(chuàng)建Django項(xiàng)目,結(jié)合圖文與實(shí)例形式詳細(xì)分析了Django項(xiàng)目創(chuàng)建的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2019-06-06

最新評(píng)論

祁连县| 神农架林区| 丹阳市| 湘西| 昔阳县| 尚义县| 门源| 会理县| 永川市| 衡阳市| 靖安县| 睢宁县| 库伦旗| 西安市| 格尔木市| 安顺市| 长沙市| 延庆县| 横山县| 鄂温| 永州市| 天津市| 建始县| 务川| 衡山县| 定日县| 木兰县| 铜梁县| 金昌市| 乐亭县| 昆山市| 民权县| 合江县| 纳雍县| 华池县| 河津市| 马鞍山市| 濮阳市| 澄江县| 乃东县| 班玛县|