Python 如何在迭代结束时进行反向迭代

Python 如何在迭代结束时进行反向迭代,python,python-3.x,Python,Python 3.x,我很难做一个无限循环,一旦我的迭代结束,它就会向后迭代 例如: for i in range(5): for j in range(5): print(i, j) 将打印: (0,0), (0,1), (0,3), ... (4,4) 我如何修改它,一旦它达到(4,4),它将简单地 (0,0), (0,1), (0,3), ... (4,4), (4, 3), (4, 2), (4, 1), ... (0, 0), (0, 1), (0, 2), ... (4, 4)

我很难做一个无限循环,一旦我的迭代结束,它就会向后迭代

例如:

for i in range(5):
    for j in range(5):
        print(i, j)
将打印:

(0,0), (0,1), (0,3), ... (4,4)
我如何修改它,一旦它达到(4,4),它将简单地

(0,0), (0,1), (0,3), ... (4,4), (4, 3), (4, 2), (4, 1), ... (0, 0), (0, 1), (0, 2), ... (4, 4), ...
所以这是一个无限的迭代。我找不到解决这个问题的方法,我希望我能被引导到正确的方法来解决这个问题。我不允许使用任何导入,所以我想我必须通过循环来执行此操作。

您可以使用

导入itertools
列表=[…]
对于itertools.cycle中的i(列表+列表[:-1]):
印刷品(一)

@BoarGules和@chai答案不是OP想要的,因为它们产生
,(0,0),…
,(4,4),…

要获得所需的输出,可以使用以下命令

m=5
t=(0,m,1)
尽管如此:
对于范围内的i(*t):
对于范围内的j(*t):
如果(i,j)=(t[1]-t[2],t[1]-t[2]):中断
打印((i,j))
t=(t[1]-t[2],t[0]-t[2],-t[2])
解释

元组
t
包含
range()
的参数。我们的想法是,每当两个for循环完成时,我们必须更改
range()
的参数,以便向后遍历这些数字。这是通过最后一行
t=(t[1]-t[2],t[0]-t[2],-t[2])
实现的,它将在
(2,-1,-1)
(0,3,1)
之间共振

除此之外,我们需要确保不打印“最后一个”元组两次。
if
语句通过不打印最后一个元组来解决这个问题。因此,每次
迭代将打印
(0,0)、(0,1)、(4,3)
(4,4)、(4,3)、(0,1)


注意:您可以通过@BoarGules和@chai修改答案来获得相同的结果。但是,这种方法不需要将模式的整个周期存储在内存中,就像@chai的答案一样,它不会重复代码。

您可以将打印的所有项目添加到堆栈中,然后在完成后再次从堆栈中弹出每个项目。或者您可以添加更多的循环,只会产生相同的数字,但顺序不同。有没有办法将其写入嵌套循环中?是的,这是可能的。