溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

優化python效率的方法有哪些

發布時間:2020-08-10 09:13:26 來源:億速云 閱讀:186 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關優化python效率的方法有哪些的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

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

優化python效率的方法有哪些

優化方法:

1、優化算法時間復雜度

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

2、減少冗余數據

如用上三角或下三角的方式去保存一個大的對稱矩陣。在0元素占大多數的矩陣里使用稀疏矩陣表示。

3、合理使用copy與deepcopy

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

import copy
a = range(100000)
%timeit -n 10 copy.copy(a) # 運行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表示運行的次數,后兩行對應的是兩個timeit的輸出,下同。由此可見后者慢一個數量級。

4、使用dict或set查找元素

python dict和set都是使用hash表來實現(類似c++11標準庫中unordered_map),查找元素的時間復雜度是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對象,所需要的內存空間與列表的大小無關,所以效率會高一些。在具體應用上,比如set(i for i in range(100000))會比set([i for i in range(100000)])快。

但是對于需要循環遍歷的情況:

%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

后者的效率反而更高,但是如果循環里有break,用generator的好處是顯而易見的。yield也是用于創建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

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

python2.x內置generator功能的有xrange函數、itertools包等。

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女