記得朋友說過這樣的話: " 在我們指責機器配置不高, 程式速度慢的時候, 我們應該找找自己的程式**寫的不高效. 因為現在的電腦硬體已經很強大, 當遇到瓶頸後, 多找找自己**的問題, 不要總是指責機器的不是 ! " 越來越覺得這句話很實在, 而這裡造成我們的**執行速度不夠快的原因有多方面, 第乙個當然是演算法設計本身, 這個相對好處理, 選用更加高效的演算法或者更適合的資料結構, 而另一種則比較隱蔽, 需要長久的程式設計經驗才能注意到. 本文希望對這些能提高程式速度的小技巧做一些介紹, 讓我們的python**也飛起來! (持續更新, 歡迎討論)
假如現在有乙個list,裡面是一些字串,你現在需要將它們合併成乙個字串,最簡單的方法,你可以按照下面的方式去處理:
colors = ['red', 'blue', 'green', 'yellow']result = ''
for s in colors:
result += s
但是,很快你會發現:這種方法非常低效,尤其當list非常大的時候。python中的字串物件是不可改變的,因此對任何字串的操作如拼接,修改等都將產生乙個新的字串物件,而不是基於原字串。所以,上面的方法會消耗很大的記憶體:它需要計算,儲存,同時扔掉中間的計算結果。正確的方法是使用python中的join方法:
result = ','.join(colors)當合併元素比較少的時候,使用join方法看不出太大的效果;但是當元素多的時候,你會發現join的效率還是非常明顯的。不過,在使用的時候請注意:join只能用於元素是字串的list,它不會進行任何的強制型別轉換。連線乙個存在乙個或多個非字串元素的list時將丟擲異常。做了乙個測試, 簡單迴圈中, 對字串做100w次拼接, 使用第一種方法, 耗時10s以上, 而.join方法只要1s. 已經有乙個量級的差別.
當你需要判斷乙個key是否在dict中或者要遍歷dict的key時,最好的方法是使用關鍵字in:
d =python的dict物件是對key做過hash的,而keys()方法會將dict中所有的key作為乙個list物件;所以,直接使用in的時候執行效率會比較快,**也更簡潔。if 'c' in d:
print true
# do not use
if d.has_key('c'):
print true
for key in d:
print key
# do not use
for key in d.keys():
print key
怎麼讓分頁更高效
最基本的分頁方式 select from where order by limit 在中小資料量的情況下,這樣的sql足夠用了,唯一需要注意的問題就是確保使用了索引 舉例來說,如果實際sql類似下面語句,那麼在category id,id兩列上建立復合索引比較好 select from articl...
使用python更高效
1.判斷字典key是否存在 in的處理速度更快,has key方法在python3被移除 def has dict key d bad if d.has key name d.get name good if name in d d.get name 2.使用git獲取字典的值 使用d x 訪問元素...
這個公式,讓你的學習更高效
如果你讀書是為了 單純的 審美,為了消遣,那沒關係,怎麼讀都可以 但如果你讀書是為了學習,獲取知識,提公升自己,那更好的方式,就是針對知識點,去一一進行 殲滅 為什麼呢?因為,這才是最貼合我們大腦的認知的學習方式。簡而言之,就是 聯絡 舉個例子,不妨看看這句話 蘇美爾南臨波斯灣,由若干塊荒蕪多風的小...