Как составить список координат всех столбцов и строк - PullRequest
0 голосов
/ 30 сентября 2019

Предположим, у меня есть сетка n x n, и я хочу функцию, которая генерирует список всех столбцов и строк, принимая n в качестве входных данных в python. Под списком столбцов я подразумеваю, что каждый столбец представлен в виде своего собственного списка, причем элементы являются координатами элементов в столбце. (Или каждый столбец может быть набором координат, который тоже будет работать)

Я мог бы сделать это, используя два понимания списка,

x = [[ (i, j) for j in range(n)] for i in range(n)] + [[ (i, j) for i in range(n)] for j in range(n)]

С n=3 это создает список с 9элементы, каждый из которых представляет собой список из 3 координат.

x = [[(0, 0), (0, 1), (0, 2)], [(1, 0), (1, 1), (1, 2)], [(2, 0), (2, 1), (2, 2)], [(0, 0), (1, 0), (2, 0)], [(0, 1), (1, 1), (2, 1)], [(0, 2), (1, 2), (2, 2)]]

Мне было интересно, есть ли более чистый способ сделать то же самое, возможно, с помощью itertools или аналогичного модуля.

1 Ответ

0 голосов
/ 10 октября 2019

Не совсем точно, если это то, что вы ищете, но вы можете попробовать itertools.product
Например

>>> from itertools import product
>>> n = 3

>>> list(product(range(n),range(n)))
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

>>> [list(product(range(n),range(n)))[n*i:n*i+n] for i in range(n)]
[[(0, 0), (0, 1), (0, 2)], [(1, 0), (1, 1), (1, 2)], [(2, 0), (2, 1), (2, 2)]]

>>> [list(product(range(n),range(n)))[i::n] for i in range(n)]
[[(0, 0), (1, 0), (2, 0)], [(0, 1), (1, 1), (2, 1)], [(0, 2), (1, 2), (2, 2)]]
...