2012-08-01 110 views
3

我在我的Python代碼使用該循環的循環:簡化蟒蛇

final_fun=[] 
for i_base in xrange(n_base): 
    final_fun.append(sum(fun[:,i_base])/n_ci) 

,我想知道我怎麼可以簡化這個循環?如果我簡化這個循環,我的程序會更快嗎?一般來說,我知道如何簡化這個,但在這裏我被追加阻止!

回答

8

使用列表解析。它更快,更乾淨。解釋器可以通過for循環減慢很多,並且通過簡單地重新排列語法就沒有任何損失。

有關更多詳細信息,請參見this explanation

final_fun = [sum(fun[:,i_base])/n_ci for i_base in xrange(n_base)] 
+1

這個*可能會變得很複雜,有時它很適合有一個for循環 – 2012-08-01 15:30:37

+0

for循環通常在python中比較慢。特別是如果你使用多個for循環,列表推導就是爲了更有效地處理這種事情而設計的。 – 2012-08-01 15:31:55

+0

謝謝!我在開始時嘗試了這個,但有一些錯誤! – PanAkry 2012-08-01 15:33:06

2

看來fun是一個二維的NumPy數組。在這種情況下,您可以完全避免了Python循環簡化和加速代碼顯著:

final_fun = fun.sum(axis=0)/n_ci 

你會最終有一個NumPy的陣列,而不是一個名單,但機會是,這是你想要的呢。

+0

+1。感謝您關注已經回答的問題。 – 2012-08-01 15:53:21