Преобразовать матрицу в список кортежей Python
Дана матрица N*N, состоящая из 0 и 1. Необходимо преобразовать её в список кортежей длины N. Количество элементов в списке равно количеству единиц в матрице.
Например, [[0, 0, 0], [0, 0, 0], [0, 0, 1]] -> [(0, 0, 3)]
Как можно это реализовать на Python?
Ответы (2 шт):
Автор решения: passant
→ Ссылка
После дискуссии в комментариях меня гложут смутные сомнения что вы правильно сформулировали задания. Что-то из задания вы либо неправильно поняли, либо неверно формулируете. Тем не менее привожу решение задачи именно в вашей формулировке.
N=len(arr)
rezz=[]
for el in arr:
s=el.count(1)
rez=[0,0,0]
for i,ell in enumerate(el):
if ell==1:
rez[i]=N
for _ in range(s):
rezz.append(tuple(rez))
и ее результаты для ваших контрольных случаев:
[[0, 0, 0], [0, 0, 0], [0, 0, 1]]
[(0, 0, 3)]
[[1, 0, 0], [0, 1, 0], [0, 0, 1]]
[(3, 0, 0), (0, 3, 0), (0, 0, 3)]
[[1, 1, 1], [1, 1, 1], [1, 1, 1]]
[(3, 3, 3), (3, 3, 3), (3, 3, 3), (3, 3, 3), (3, 3, 3), (3, 3, 3), (3, 3, 3), (3, 3, 3), (3, 3, 3)]
и еще один дополнительный
[[1, 1, 1], [1, 0, 1], [1, 1, 1]]
[(3, 3, 3), (3, 3, 3), (3, 3, 3), (3, 0, 3), (3, 0, 3), (3, 3, 3), (3, 3, 3), (3, 3, 3)]
Автор решения: AnnaBazueva
→ Ссылка
Можно сделать проще:
from rich import inspect
test = ([[0, 0, 0], [0, 0, 0], [0, 0, 1]],
[[1, 0, 0], [0, 1, 0], [0, 0, 1]],
[[1, 1, 1], [1, 1, 1], [1, 1, 1]]
)
for m in test:
res = [tuple(x * 3 for x in l) for l in m for _ in range(sum(l))]
inspect(res)
output:
╭─────────────────────── <class 'list'> ───────────────────────╮
│ Built-in mutable sequence. │
│ │
│ ╭──────────────────────────────────────────────────────────╮ │
│ │ [(0, 0, 3)] │ │
│ ╰──────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────╯
╭─────────────────────── <class 'list'> ───────────────────────╮
│ Built-in mutable sequence. │
│ │
│ ╭──────────────────────────────────────────────────────────╮ │
│ │ [(3, 0, 0), (0, 3, 0), (0, 0, 3)] │ │
│ ╰──────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────╯
╭─────────────────────── <class 'list'> ───────────────────────╮
│ Built-in mutable sequence. │
│ │
│ ╭──────────────────────────────────────────────────────────╮ │
│ │ [ │ │
│ │ │ (3, 3, 3), │ │
│ │ │ (3, 3, 3), │ │
│ │ │ (3, 3, 3), │ │
│ │ │ (3, 3, 3), │ │
│ │ │ (3, 3, 3), │ │
│ │ │ (3, 3, 3), │ │
│ │ │ (3, 3, 3), │ │
│ │ │ (3, 3, 3), │ │
│ │ │ (3, 3, 3) │ │
│ │ ] │ │
│ ╰──────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────╯