(使用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循环合并在一起,这仍然有助于加快我的代码的速度?
答案 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 }})您想要的其他元组。