成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

優(yōu)化python效率的方法有哪些-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)優(yōu)化python效率的方法有哪些的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比順城網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式順城網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋順城地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴。

優(yōu)化python的效率的方法:1、優(yōu)化算法時間復(fù)雜度;2、減少冗余數(shù)據(jù);3、合理使用copy與deepcopy;4、使用dict或set查找元素;5、合理使用生成器(generator)和yield。

優(yōu)化python效率的方法有哪些

優(yōu)化方法:

1、優(yōu)化算法時間復(fù)雜度

算法的時間復(fù)雜度對程序的執(zhí)行效率影響大,在Python中可以通過選擇合適的數(shù)據(jù)結(jié)構(gòu)來優(yōu)化時間復(fù)雜度,如list和set查找某一個元素的時間復(fù)雜度分別是O(n)和O(1)。

2、減少冗余數(shù)據(jù)

如用上三角或下三角的方式去保存一個大的對稱矩陣。在0元素占大多數(shù)的矩陣?yán)锸褂孟∈杈仃嚤硎尽?/p>

3、合理使用copy與deepcopy

對于dict和list等數(shù)據(jù)結(jié)構(gòu)的對象,直接賦值使用的是引用的方式。而有些情況下需要復(fù)制整個對象,這時可以使用copy包里的copy和deepcopy,這兩個函數(shù)的不同之處在于后者是遞歸復(fù)制的。效率也不一樣:(以下程序在ipython中運(yùn)行)

import copy
a = range(100000)
%timeit -n 10 copy.copy(a) # 運(yùn)行10次 copy.copy(a)
%timeit -n 10 copy.deepcopy(a)
10 loops, best of 3: 1.55 ms per loop
10 loops, best of 3: 151 ms per loop

timeit后面的-n表示運(yùn)行的次數(shù),后兩行對應(yīng)的是兩個timeit的輸出,下同。由此可見后者慢一個數(shù)量級。

4、使用dict或set查找元素

python dict和set都是使用hash表來實(shí)現(xiàn)(類似c++11標(biāo)準(zhǔn)庫中unordered_map),查找元素的時間復(fù)雜度是O(1)

a = range(1000)
s = set(a)
d = dict((i,1) for i in a)
%timeit -n 10000 100 in d
%timeit -n 10000 100 in s
10000 loops, best of 3: 43.5 ns per loop
10000 loops, best of 3: 49.6 ns per loop

dict的效率略高(占用的空間也多一些)。

5、合理使用生成器(generator)和yield

%timeit -n 100 a = (i for i in range(100000))
%timeit -n 100 b = [i for i in range(100000)]
100 loops, best of 3: 1.54 ms per loop
100 loops, best of 3: 4.56 ms per loop

使用()得到的是一個generator對象,所需要的內(nèi)存空間與列表的大小無關(guān),所以效率會高一些。在具體應(yīng)用上,比如set(i for i in range(100000))會比set([i for i in range(100000)])快。

但是對于需要循環(huán)遍歷的情況:

%timeit -n 10 for x in (i for i in range(100000)): pass
%timeit -n 10 for x in [i for i in range(100000)]: pass
10 loops, best of 3: 6.51 ms per loop
10 loops, best of 3: 5.54 ms per loop

后者的效率反而更高,但是如果循環(huán)里有break,用generator的好處是顯而易見的。yield也是用于創(chuàng)建generator:

def yield_func(ls):
for i in ls:
yield i+1
 def not_yield_func(ls):
return [i+1 for i in ls]
 ls = range(1000000)
%timeit -n 10 for i in yield_func(ls):pass
%timeit -n 10 for i in not_yield_func(ls):pass
10 loops, best of 3: 63.8 ms per loop
10 loops, best of 3: 62.9 ms per loop

對于內(nèi)存不是非常大的list,可以直接返回一個list,但是可讀性yield更佳(人個喜好)。

python2.x內(nèi)置generator功能的有xrange函數(shù)、itertools包等。

感謝各位的閱讀!關(guān)于優(yōu)化python效率的方法有哪些就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

分享名稱:優(yōu)化python效率的方法有哪些-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://jinyejixie.com/article48/peiep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google網(wǎng)站維護(hù)、網(wǎng)站設(shè)計(jì)公司企業(yè)網(wǎng)站制作、關(guān)鍵詞優(yōu)化電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
凉城县| 安乡县| 珲春市| 日土县| 眉山市| 吉林省| 钟山县| 高青县| 东平县| 靖州| 张北县| 芜湖县| 博客| 泾阳县| 嘉祥县| 拉孜县| 蒙自县| 肇州县| 石屏县| 五河县| 宁夏| 大洼县| 保山市| 长宁区| 颍上县| 舞阳县| 石嘴山市| 梁山县| 绥宁县| 蒙山县| 洞口县| 商洛市| 龙里县| 盐源县| 宜川县| 扶沟县| 松滋市| 玉山县| 涿鹿县| 从化市| 句容市|