Преобразовать матрицу в список кортежей 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)                                            │ │
│ │ ]                                                        │ │
│ ╰──────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────╯
→ Ссылка