Извлеките все числа из списка списков [duplicate]

GpG спросил: 28 апреля 2018 в 09:48 в: python

У этого вопроса уже есть ответ:

  • Making a flat list out of list of lists in Python 34 ответа

Есть ли простая функция, которая может извлекать все числа из списка списков. Например:

l = [ [1,2], [1, 5], [2] ] -> [1,2,1,5,2]

Мне бы хотелось избежать использования циклов или списков.

3 ответа

Есть решение
Rakesh ответил: 28 апреля 2018 в 09:49

Использование itertools.chain

Демонстрация:

import itertools
l = [ [1,2], [1, 5], [2] ] 
print(list(itertools.chain(*l))) #or print(list(itertools.chain.from_iterable(l)))

Выход:

[1, 2, 1, 5, 2]
Mihai Alexandru-Ionut ответил: 28 апреля 2018 в 09:54

Я бы хотел избежать использования меток или списков.

Вы можете использовать метод itertools.chain в сочетании с оператором Extended iterable unpacking .

chain делает iterator , что возвращает элементы из первого итерабельного, пока он не исчерпан, а затем переходит к следующему iterable, пока все итерации не исчерпаны.

import itertools
merged = list(itertools.chain(*l))

Выход

[1,2,1,5,2]

Другой подход заключается в использовании reduce.

l = reduce(lambda x,y: x+y,l)
Biskit1943 ответил: 28 апреля 2018 в 09:52
Почему вы хотите их избежать?
Ofer Sadan ответил: 28 апреля 2018 в 10:01
@ Biskit1943 OP сказал так
akash karothiya ответил: 28 апреля 2018 в 09:49

Используйте list comprehension:

>>> x = [j for i in l for j in i]
[1, 2, 1, 5, 2]