for循环的三个值

Mat*_*t X 8 python loops for-loop

我希望以不同的速度增加三个值.我的总体目标是模仿这种模式:

0,0,   0
0,1,   1
0,2,   2
1,0,   3
1,1,   4
1,2,   5
2,0,   6
2,1,   7
2,2,   8
Run Code Online (Sandbox Code Playgroud)

前两个数字很简单.我会像这样解决它:

for x in range(3):
    for y in range(3):
        print(x, y)
>>> 0 0
>>> 0 1
>>> 0 2
>>> 1 0
>>> 1 1
>>> 1 2
>>> 2 0
>>> 2 1
>>> 2 2
Run Code Online (Sandbox Code Playgroud)

这是我想要的模式.

问题是我如何每次增加第三个数字,同时仍然使前两个数字以它们的方式递增?

基本上,每次for循环运行时,如何使第三个数字增加1?

raf*_*elc 8

既然我们有这些答案,我会发布最简单的答案

count = 0
for x in range(3):
    for y in range(3):
        print(x, y, count)
        count += 1
Run Code Online (Sandbox Code Playgroud)


PM *_*ing 6

您不需要嵌套循环.您可以使用itertools.product获取前两个数字,并enumerate获取最后一个数字.

from itertools import product

for i, (u, v) in enumerate(product(range(3), repeat=2)):
    print(u, v, i)
Run Code Online (Sandbox Code Playgroud)

产量

0 0 0
0 1 1
0 2 2
1 0 3
1 1 4
1 2 5
2 0 6
2 1 7
2 2 8
Run Code Online (Sandbox Code Playgroud)

itertools.product是一个非常方便的功能.它基本上有效地执行嵌套循环,但它的主要好处是它们看起来不是嵌套的,所以你最终不会使用大量缩进的代码.但是,当您不知道运行时需要多少嵌套循环时,它的真正优势就出现了.

enumerate可能更有用:它允许您迭代序列或任何可迭代的并返回迭代的项目以及索引号.所以每当你需要循环遍历列表但是你需要列表项及其索引时,使用enumerate它们同时获得它们更有效,而不是使用一个循环range来生成索引然后使用索引来获取列表项.

  • 虽然这是一些奇特的python功能的一个很好的例子,但对于初学者来说,我认为这是一个比简单的计数器更不易读的解决方案. (2认同)

Mur*_*nik 5

第三个数字计算到目前为止您已经完成了多少次迭代.对于X中的每个增量,它获得Y循环的总大小,并且您需要添加Y的值:

X_SIZE = 3
Y_SIZE = 3
for x in range(X_SIZE):
    for y in range(Y_SIZE):
        print(x, y, x * Y_SIZE + y)
Run Code Online (Sandbox Code Playgroud)