2015-08-03 87 views
-3

我的代碼片段,其中蟒蛇採取長的時間長數組:Python的優化算術

n =30000 
t = range(1,n) 
s = sum(t) 
for i in t: 
    for j in t[i:]: 
    if ts-j == i*j: 
     //some simple code 

有什麼辦法優化它?我檢查了差異和乘法都花費了很多時間。我嘗試過numpy,但結果是最糟糕的。

澄清:條件很少滿足 - 肯定低於10,因此它不會影響性能。這將只是簡單的分配。問題在於if條件和大數字的算術運算。

+0

如果你還沒有告訴我們你甚至想要做什麼,我們如何建議更快的方法來做某件事? – CoryKramer

+0

我已經添加了對問題的說明 – user2576342

+1

基本上,你有兩個問題:1.每次迭代都會創建一個新的'list',因爲'list'切片在Python中以這種方式工作; 2.''''循環速度慢,所以用更快的東西來代替雙循環。 'itertools.combinations'。然後在功能上重寫它,例如在'(i,j)'元組的生成器上映射一個函數。很難推薦更具體的東西,因爲你不顯示所需的輸出等。 –

回答

1

由於您沒有指定什麼ts是,我們必須假設它是一個整數常量。

內循環的條件是ts - j == i * j,這隻有在i + 1jts時纔有可能。

因此,您應該計算因子ts並生成滿足1 ≤ i ≤ j ≤ n的所有因子(i + 1) . j