为什么不将两个循环融合在一起会产生与嵌套循环相同的结果?

时间:2019-02-07 17:58:26

标签: python for-loop merge nested-loops

(使用python 2)

建议我将我的两个循环融合在一起,以加快执行时间太长的代码。

所以代替这个:

for timestep in range(0,100): 
     for xn in xrange(0,npoints):
          for step in xrange(0,npoints):


               fx=somefunction[xn]+somefunction[step]

               print fx

我用了这个:

for timestep in xrange(0,100):
     for step, xn in itertools.product([0,npoints-1],[0,npoints-1]):


          fx=somefunction[xn]+somefunction[step]

          print fx

但是当我打印出函数fx时,得到了两个非常不同的结果。

对于嵌套循环(代码的第一块),我得到了999个数字的列表(这是正确的长度)。

但是,当我尝试将两个循环合并在一起(第二个代码块)时,我应该从列表中得到的999个数字中只有四个。

我合并for循环错误吗?还有另一种方法可以将嵌套的for循环合并在一起,这仍然有助于加快我的代码的速度?

1 个答案:

答案 0 :(得分:1)

您得到不同的结果,因为您没有使用相同的序列。您仍然需要public class cylinder extends circle{ public cylinder(double x, double y, double r, double h){ super(x,y,r); height(h); } public void height(double h){ double depth = h; } public double getVolume(double r, double h){ double volume = super.getArea(r)*h; System.out.println("Volume is"+volume); return volume; } public String getName(){ System.out.println("Cylinder"); return "Cylinder"; } public double getArea(double r, double h){ double area = 2*3.142*r*h; System.out.println("Area is" + area); return area; } } ,因为xrange可迭代对象(而不是一对端点)作为其参数。

product

使用for step, xn in itertools.product(xrange(0, npoints), repeat=2): ,您仅遍历元组:product([0,n_points-1], [0,n_points-1])(0,0)(0,n_points-1)(n_points-1,0),而不是O({{1 }})您想要的其他元组。