← Все вопросы
Как «сплющить» список списков в один плоский список?
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.
Ваш ответ
Войдите, чтобы ответить на вопрос.