我想让三个值以不同的速度递增。我的总体目标是模仿这种模式:
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
前两个数字很简单。我会这样解决:
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
这是我想要的模式。
问题是我如何在使第三个数字每次递增一个的同时仍使前两个数字按原样递增?
基本上,每次for循环时,如何使第三个数字递增1?
答案 0 :(得分:8)
既然我们拥有所有这些答案,我将发布最直接的答案
count = 0
for x in range(3):
for y in range(3):
print(x, y, count)
count += 1
答案 1 :(得分:6)
您不需要嵌套循环。您可以使用itertools.product
来获取前两个数字,并使用enumerate
来获取最后一个数字。
from itertools import product
for i, (u, v) in enumerate(product(range(3), repeat=2)):
print(u, v, i)
输出
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
itertools.product
是非常方便的功能。它基本上有效地执行了嵌套循环,但是它的主要好处是它们不会 look 嵌套,因此最终不会产生大量缩进的代码。但是,当您直到运行时才知道需要多少个嵌套循环时,它的真正优势就来了。
enumerate
可能更有用:它使您可以迭代序列或任何可迭代对象,并返回可迭代对象的项目以及索引号。因此,每当您需要遍历一个列表但又需要列表项及其索引时,使用enumerate
一次获取它们和使用一个range
进行循环会更有效生成索引,然后使用索引来获取列表项。
答案 2 :(得分: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)
答案 3 :(得分:3)
单个变量。单循环。
for i in range(9):
print(i // 3, i % 3, i)
//
是楼层划分,%
是模数(在大多数情况下为余数)
我个人喜欢这种解决方案,因为它可以清楚地说明基本模式,因此可以轻松更改或扩展为其他模式。
答案 4 :(得分:2)
尝试一下:
for x in range(3):
for y in range(3):
print(x, y, x * 3 + y) # Python 3.x
print x, y, x * 3 + y # Python 2.x
希望这会有所帮助。
答案 5 :(得分:1)
您可以为此简单地使用一个计数变量
count = 0
for x in range(3):
for y in range(3):
print(x, y, ' ' ,count) # use ' ' for making exact look what OP asked..lol
count = count + 1
答案 6 :(得分:1)
对我来说,这看起来更自然:)
x_range = 3
y_range = 3
for x in range( x_range*y_range ):
print(x // x_range, x % x_range, x)
类似于cwharris撰写的内容。