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?
既然我们有这些答案,我会发布最简单的答案
count = 0
for x in range(3):
for y in range(3):
print(x, y, count)
count += 1
Run Code Online (Sandbox Code Playgroud)
您不需要嵌套循环.您可以使用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来生成索引然后使用索引来获取列表项.
第三个数字计算到目前为止您已经完成了多少次迭代.对于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)
| 归档时间: |
|
| 查看次数: |
507 次 |
| 最近记录: |