【发布时间】:2018-11-22 23:54:12
【问题描述】:
所以我有一个像这样的 4x4 矩阵
|0 1 2 3
-+-------
0|0 1 3 6
1|2 4 7 a
2|5 8 b d
3|9 c e f
我正在按照其中的十六进制字符指定的顺序遍历它。所以从 (0, 0) 开始,然后是 (1, 0), (0, 1), (2, 0), (1, 1), (0, 2)...
代码如下:
def diagonal(n):
for a in range(n):
for b in range(a + 1):
yield a - b, b
for a in range(n - 1):
for b in range(n - a - 1):
yield n - b - 1, b + 1 + a
遍历这个给出
for x, y in diagonal(4):
print((x, y))
# (0, 0)
# (1, 0)
# (0, 1)
# (2, 0)
# (1, 1)
# (0, 2)
# (3, 0)
# (2, 1)
# (1, 2)
# (0, 3)
# (3, 1)
# (2, 2)
# (1, 3)
# (3, 2)
# (2, 3)
# (3, 3)
这正是我想要的。我坚持的部分是试图创建一个函数,我给它索引,它给我坐标。所以对于我的 4x4 矩阵,(这仍然是十六进制)
0 -> (0, 0)
1 -> (1, 0)
2 -> (0, 1)
3 -> (2, 0)
4 -> (1, 1)
5 -> (0, 2)
6 -> (3, 0)
7 -> (2, 1)
8 -> (1, 2)
9 -> (0, 3)
a -> (3, 1)
b -> (2, 2)
c -> (1, 3)
d -> (3, 2)
e -> (2, 3)
f -> (3, 3)
我打算继续使用可变大小的方阵,所以我不能将这些值硬编码到字典中。
我一直在修补几个小时试图让它工作,但我一辈子都无法让它工作。
这不是家庭作业,只是我在业余时间正在做的事情,它正在慢慢把我逼上墙。
如果有任何不清楚的地方,请不要犹豫。
提前致谢。
编辑: 我想有人会评论这篇文章Traverse Matrix in Diagonal strips,这很相似,但与我的第一个函数一样,它只迭代坐标,我无法从索引中计算出坐标。
【问题讨论】: