← Все вопросы

Как «сплющить» список списков в один плоский список?

Задан 9 месяцев назад701 просмотров3 ответа
14

Есть [[1, 2], [3, 4], [5]], хочу получить [1, 2, 3, 4, 5]. Какой способ самый правильный/быстрый и без сторонних библиотек?

3 ответа

24
✓ Принятый ответ — помог автору

Для одного уровня вложенности есть два хороших варианта.

Comprehension с двумя for (порядок как в обычном вложенном цикле):

nested = [[1, 2], [3, 4], [5]]
flat = [x for row in nested for x in row]
# [1, 2, 3, 4, 5]

Или через itertools.chain:

from itertools import chain
flat = list(chain.from_iterable(nested))

chain.from_iterable обычно чуть быстрее и читается чище, особенно когда подсписков много. Оба работают ТОЛЬКО на один уровень вложенности — для произвольной глубины нужна рекурсия.

Виктор Сорокин chain.from_iterable — мой выбор по умолчанию · 8 месяцев назад
8

Только не делайте sum(nested, []) — оно работает, но это O(n²) из-за постоянного создания новых списков. На больших данных просядет.

Дарья Герасимова Да, классическая ловушка из StackOverflow · 8 месяцев назад
4

chain.from_iterable.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект