Python - Присвоение (x, y) координат значениям списка списков - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть матрица 3x3 в формате

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

Я хочу определить функцию, которая преобразует любой заданный список списков в следующий формат, где есть 1. значение и 2. the ( 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))]

Есть ли способ реализовать это?

Ответы [ 3 ]

4 голосов
/ 10 апреля 2020

Вы можете использовать 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))]
2 голосов
/ 10 апреля 2020

Это решит вашу проблему:

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)
1 голос
/ 10 апреля 2020

Я думаю, что вам нужно знать здесь - базовые c знания о циклах и вложенных циклах и массиве.

Это поможет вам помочь

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) 

Если вы новичок, просто проверить некоторые из этих веб-сайтов для получения знаний. Но вы не найдете прямого ответа или точного логина c на этот вопрос. ссылки предназначены только для учебных целей, и если вы уже знаете эти топи c, вы можете их игнорировать.

Петли Массив

...