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

Why doesn't fusing two loops together produce the same result as a nested loop?

(使用 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 循环合并在一起,这仍然有助于加快我的代码速度吗?

您得到的结果不同,因为您使用的序列不同。您仍然需要 xrange,因为 product 采用 iterables,而不是端点对作为其参数。

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)(n_points-1,n_points-1),而不是 O(n_points**2) 您想要的不同元组。`