Re: [討論] 提昇Python執行的速度

看板Python作者 (Apua)時間15年前 (2010/04/13 22:58), 編輯推噓1(108)
留言9則, 3人參與, 最新討論串6/6 (看更多)
: for n in range(counts): : input_temp=input() : temp=range(1,input_temp+1) : count=0 : for i in temp[4::5]: : count+=logfive(i) : print count 您使用了range(n)來建立一組list,同時又使用了slice切片處理 必須說,當n極大時(python處理無窮長整數可是出了名的) 你的temp會因為製造range(n)這個怪物而極慢 若使用xrange(n)來避免製造怪物,則您就不能用切片處理了。 (其實xrange也不能製造怪物,因為xrange的引數不能是長整數) 除此之外,當temp極大時,使用for迴圈似乎也會特別慢(據說) 試圖用特別的手法來加速是不錯, 但既然都用python了,建議用值覺得方法來解決當前問題就好。 -- 使用python2.6 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.104.29.51

04/13 23:16, , 1F
那個 slice 操作是不必要的。他想要 iterate 5 的倍數,
04/13 23:16, 1F

04/13 23:18, , 2F
可以使用 xrange(指定 step)。
04/13 23:18, 2F
※ 編輯: apua 來自: 59.104.29.51 (04/14 00:28)

04/14 00:48, , 3F
不曉得你建議的直覺做法是指?
04/14 00:48, 3F
就是您的作法XD 我覺得那樣清楚又直覺

04/14 00:49, , 4F
是針對原 po 想要使用 slice 來略過前幾個數?
04/14 00:49, 4F

04/14 00:59, , 5F
如果考慮倒要應付極大的數,他這演算法本身也需要大改進
04/14 00:59, 5F
因為他的題目一開始有出現99999999!所以應該是要考慮沒錯 不用range/xrange的話,直接用您前面寫的tail_zeros(),因為是單純的計算, 所以不必擔心長整數的影響,輕鬆多了。

04/14 01:28, , 6F
那如果改用range(0,temp_input+1,5)呢?
04/14 01:28, 6F

04/14 05:43, , 7F
舊的方法細部再怎麼改還是 O(N)...
04/14 05:43, 7F

04/14 05:44, , 8F
如果你真的需要速度,就該好好想想 s 大的演算法。
04/14 05:44, 8F

04/14 05:45, , 9F
s 大的演算法是 O(log(n)) 的,大數 O(N) 根本沒勝算
04/14 05:45, 9F
是呀 ※ 編輯: apua 來自: 140.109.17.44 (04/14 10:03)
文章代碼(AID): #1Bn8QjJx (Python)
文章代碼(AID): #1Bn8QjJx (Python)