Python, каким образом можно объединить матрицу в список без циклов?

Например, есть матрица

 [['1', '4', '9', '9', '4', '7'], ['6', '9', '8', '6', '7', '4'],
 ['1', '1', '6', '1', '1', '1'], ['1', '4', '5', '8', '7', '5'],
 ['6', '7', '8', '1', '1', '0'], ['6', '9', '9', '9', '7', '7']]

Как можно объединить эту матрицу в список lst=[] БЕЗ циклов? Чтобы получился список lst=['1', '4', '9', '9', '4', '7','6', '9', '8', '6', '7', '4','1', '1', '6', '1', '1', '1','1', '4', '5', '8', '7', '5','6', '7', '8', '1', '1', '0', '6', '9', '9', '9', '7', '7']?


Ответы (4 шт):

Автор решения: overxffff

Если можно с библиотекой itertools

import itertools


s=[['1', '4', '9', '9', '4', '7'], ['6', '9', '8', '6', '7', '4'],
 ['1', '1', '6', '1', '1', '1'], ['1', '4', '5', '8', '7', '5'],
 ['6', '7', '8', '1', '1', '0'], ['6', '9', '9', '9', '7', '7']]
l =  list(itertools.chain(*s))

print(l)

['1', '4', '9', '9', '4', '7', '6', '9', '8', '6', '7', '4', '1', '1', '6', '1', '1', '1', '1', '4', '5', '8', '7', '5', '6', '7', '8', '1', '1', '0', '6', '9', '9', '9', '7', '7']

→ Ссылка
Автор решения: Dmitry

Дисклеймер

start

Нет причин не доверять словам и замечаниям от @strawdog.

Не рекомендуется использовать. Причины:

  • не масштабируемость
  • квадратичная сложность O(n^2)

Как вариант оставлю, потому что это решает проблему, хоть и не эффективно и как говорят грязный хак. Пользуйтесь на свой страх и риск

end

Вот такое решение

matrix = [['1', '4', '9', '9', '4', '7'], ['6', '9', '8', '6', '7', '4'],
          ['1', '1', '6', '1', '1', '1'], ['1', '4', '5', '8', '7', '5'],
          ['6', '7', '8', '1', '1', '0'], ['6', '9', '9', '9', '7', '7']]

lst = sum(matrix, [])

Метод sum() используется как знак + для всех объектов основного (верхнего) списка. Если суммировать списки, то применяется конкатенация. Следовательно, вы просто друг за другом скидываете все списки в один.

Такой метод применим для любых built-in последовательностей, исключая словари и множества.

Про + можно почитать разобранный вопрос Что такое + в Python?

UPD

Про второй параметр можно найти в оф доке.

Данный параметр задает начальное значение, к которому будут суммироваться все итерируемые объекты последовательности. По умолчанию этот параметр равен 0, и является типом данных int. Если мы не определим в вашем примере начальное значение типа list мы получим исключение

TypeError: unsupported operand type(s) for +: 'int' and 'list'

Поскольку операция сложения между типами данных list и int не определено

→ Ссылка
Автор решения: Qwertiy

Вроде это list comprehension, а не цикл? tio.run

a = [['1', '4', '9', '9', '4', '7'], ['6', '9', '8', '6', '7', '4'],
     ['1', '1', '6', '1', '1', '1'], ['1', '4', '5', '8', '7', '5'],
     ['6', '7', '8', '1', '1', '0'], ['6', '9', '9', '9', '7', '7']]

l = [x for b in a for x in b]

print(l)
→ Ссылка
Автор решения: Stanislav Volodarskiy

itertools.chain.from_iterable:

import itertools

m = [
    ['1', '4', '9', '9', '4', '7'], ['6', '9', '8', '6', '7', '4'],
    ['1', '1', '6', '1', '1', '1'], ['1', '4', '5', '8', '7', '5'],
    ['6', '7', '8', '1', '1', '0'], ['6', '9', '9', '9', '7', '7']
]
lst = list(itertools.chain.from_iterable(m))
print(lst)

Без импортов, циклов и списковых включений:

def flatten(m):
    it = iter(m)
    lst = []
    
    def rec():
        try:
            lst.extend(next(it))
        except StopIteration:
            return
        rec()

    rec()
    return lst


m = [
    ['1', '4', '9', '9', '4', '7'], ['6', '9', '8', '6', '7', '4'],
    ['1', '1', '6', '1', '1', '1'], ['1', '4', '5', '8', '7', '5'],
    ['6', '7', '8', '1', '1', '0'], ['6', '9', '9', '9', '7', '7']
]
lst = flatten(m)
print(lst)

P.S. Ещё можно убрать ограничение на глубину рекурсии.

P.P.S. ... и обойтись без исключений.

P.P.P.S. ... и выписать всё в одну строку.

→ Ссылка