Python - создать матрицу кортежей - PullRequest
1 голос
/ 30 мая 2020

Мне нужно создать матрицу кортежей 9x9. У меня уже есть код:

squares, sub = [], []
for y in [3, 6, 9]:
    sub.append([[(y, x) for x in range(1, 10) if x % 3 == 0] for x in range(1, 10) if x % 3 == 0])

for i in sub:
    sq = []
    for j in i:
        sq.extend(j)
    sq.sort()
    squares.append(sq)
    squares.append(sq)
    squares.append(sq)

с таким результатом:

[[(3, 3), (3, 3), (3, 3), (3, 6), (3, 6), (3, 6), (3, 9), (3, 9), (3, 9)],
 [(3, 3), (3, 3), (3, 3), (3, 6), (3, 6), (3, 6), (3, 9), (3, 9), (3, 9)],
 [(3, 3), (3, 3), (3, 3), (3, 6), (3, 6), (3, 6), (3, 9), (3, 9), (3, 9)],
 [(6, 3), (6, 3), (6, 3), (6, 6), (6, 6), (6, 6), (6, 9), (6, 9), (6, 9)],
 [(6, 3), (6, 3), (6, 3), (6, 6), (6, 6), (6, 6), (6, 9), (6, 9), (6, 9)],
 [(6, 3), (6, 3), (6, 3), (6, 6), (6, 6), (6, 6), (6, 9), (6, 9), (6, 9)],
 [(9, 3), (9, 3), (9, 3), (9, 6), (9, 6), (9, 6), (9, 9), (9, 9), (9, 9)],
 [(9, 3), (9, 3), (9, 3), (9, 6), (9, 6), (9, 6), (9, 9), (9, 9), (9, 9)],
 [(9, 3), (9, 3), (9, 3), (9, 6), (9, 6), (9, 6), (9, 9), (9, 9), (9, 9)]]

Результат в точности такой, как я хочу, но как вы думаете, есть способ лучше его написать? ? Можно ли сделать проще?

Редактировать:

Результат всегда должен быть идентичным, нет никакого ввода Dynami c, и он не будет редактироваться впоследствии. Просто матрица stati c, используемая в другой части моего кода.

1 Ответ

2 голосов
/ 30 мая 2020

Вопрос немного неясен, поскольку окончательный список (и код) может быть интерпретирован, и может быть несколько интерпретаций с одним и тем же результатом.

Для одной такой интерпретации вы можете использовать ( искаженный и забавно выглядящий) понимание вложенных списков ( [Python 3.Docs]: структуры данных - понимание списков ):

>>> from pprint import pprint as pp  # For print purposes only
>>>
>>> l = [3, 6, 9]
>>>
>>> items = [[i0 for i1 in l for i0 in ((i2, i1),) * len(l)] for i2 in l for _ in l]
>>>
>>> pp(items)
[[(3, 3), (3, 3), (3, 3), (3, 6), (3, 6), (3, 6), (3, 9), (3, 9), (3, 9)],
 [(3, 3), (3, 3), (3, 3), (3, 6), (3, 6), (3, 6), (3, 9), (3, 9), (3, 9)],
 [(3, 3), (3, 3), (3, 3), (3, 6), (3, 6), (3, 6), (3, 9), (3, 9), (3, 9)],
 [(6, 3), (6, 3), (6, 3), (6, 6), (6, 6), (6, 6), (6, 9), (6, 9), (6, 9)],
 [(6, 3), (6, 3), (6, 3), (6, 6), (6, 6), (6, 6), (6, 9), (6, 9), (6, 9)],
 [(6, 3), (6, 3), (6, 3), (6, 6), (6, 6), (6, 6), (6, 9), (6, 9), (6, 9)],
 [(9, 3), (9, 3), (9, 3), (9, 6), (9, 6), (9, 6), (9, 9), (9, 9), (9, 9)],
 [(9, 3), (9, 3), (9, 3), (9, 6), (9, 6), (9, 6), (9, 9), (9, 9), (9, 9)],
 [(9, 3), (9, 3), (9, 3), (9, 6), (9, 6), (9, 6), (9, 9), (9, 9), (9, 9)]]

Примечание: Попытка изменить окончательный список (squares[0][0] = 1) может привести к «неожиданным» результатам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...