-1

我有一个格式为 3x3 的矩阵

matrix= [[0, 1, 2],
         [3, 4, 5],
         [6, 7, 8]]

我想定义一个函数,它将任何给定的列表列表转换为以下格式,其中有 1. 值和 2. 对应于每个值的 (x,y) 坐标

(0,0) (0,1) (0,2)

(1,0) (1,1) (1,2)

(2,0) (2,1) (2,2)

所以例如

input = [[0, 1, 2],
         [3, 4, 5],
         [6, 7, 8]]

会变成

output =[(0, (0, 0)), (1, (0, 1)), (2, (0, 2)),
         (3, (1, 0)), (4, (1, 1)), (5, (1, 2)),
         (6, (2, 0)), (7, (2, 1)), (8, (2, 2))]

有没有办法实现这个?

4

3 回答 3

4

您可以使用enumerate.

matrix = [[0, 1, 2],
          [3, 4, 5],
          [6, 7, 8]]

out=[(v,(i,j) for i,lst in enumerate(matrix) for j,v in enumerate(lst)]
# [(0, (0, 0)), (1, (0, 1)), (2, (0, 2)), 
#  (3, (1, 0)), (4, (1, 1)), (5, (1, 2)), 
#  (6, (2, 0)), (7, (2, 1)), (8, (2, 2))]
于 2020-04-10T10:00:00.710 回答
2

这将解决您的问题:

matrix      = [[0, 1, 2],
                   [3, 4, 5],
                   [6, 7, 8]]
transformed_matrix = []
for i in range(len(matrix)):
    for j in range(len(matrix[i])):
        transformed_matrix.append((matrix[i][j],(i,j) ))
print(transformed_matrix)
于 2020-04-10T09:59:46.620 回答
1

我想你在这里需要知道的是循环和嵌套循环和数组的基本知识。

这将解决帮助你

matrix =      [[0, 1, 2],
               [3, 4, 5],
               [6, 7, 8]]
result = []
k = 0 #this k is because in your output you want to increment it by 1 after every iteration
for i in range(len(matrix)):
    for j in range(len(matrix)):
        count = (k, (i, j))
        k = k + 1
        result.append(count)

print(result) 

如果您是初学者,只需查看其中一些网站以获取知识。但是你不会找到这个问题的直接答案或确切的逻辑。链接仅用于学习目的,如果您已经知道这些主题,则可以忽略它。

循环 数组

于 2020-04-10T11:44:11.657 回答