2012-08-01 112 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