Как легко сгладить список в Python?
Как развернуть список списков в Python
Иногда, когда вы работаете с данными, у вас может быть данные в виде списка вложенных списков. Одна из общих операций - это развернуть этот список в одномерный список в Python. Развертывание списка означает преобразование многомерного списка, такого как матрица, в одномерный список.
Чтобы лучше понять, что означает развертывание списка, предположим, что у вас есть следующая матрица числовых значений:
Переменная matrix
содержит список Python, который содержит четыре вложенных списка. Каждый вложенный список представляет собой строку в матрице. Строки содержат по четыре элемента или числа каждая. Предположим, что вы хотите преобразовать эту матрицу в следующий список:
Как вы сделаете так, чтобы ваша матрица стала плоской и получить одномерный список, как указано выше? В этом руководстве вы узнаете, как сделать это в Python.
Как развернуть список списков с помощью цикла for
Как можно развернуть список списков в Python? В общем, чтобы развернуть список списков, вы можете выполнить следующие шаги явно или неявно:
- Создайте новый пустой список для хранения развернутых данных.
- Итерируйте по каждому вложенному списку или подсписку в исходном списке.
- Добавьте каждый элемент из текущего подсписка в список развернутых данных.
- Верните получившийся список с развернутыми данными.
Чтобы продолжить с примером matrix
, вот как вы можете перевести эти шаги в код на Python с использованием цикла for
и метода .extend()
:
Внутри flatten_extend()
вы сначала создаете новый пустой список с именем flat_list
. Вы будете использовать этот список для хранения развернутых данных, когда извлечете их из matrix
. Затем вы запускаете цикл для перебора внутренних, или вложенных, списков из matrix
. В этом примере вы используете имя row
для представления текущего вложенного списка.
На каждой итерации вы используете .extend()
, чтобы добавить содержимое текущего подсписка в flat_list
. Этот метод принимает в качестве аргумента итерируемый объект и добавляет его элементы в конец целевого списка.
Теперь запустите следующий код, чтобы проверить, что ваша функция выполняет свою работу:
Вывод:
Вы должны увидеть, что функция flatten_extend()
успешно разворачивает список списков.
Используя генераторное выражение для разворачивания списка списков
Альтернативный способ развернуть список списков - это использовать генераторное выражение. Генераторное выражение - это сокращенный синтаксис для создания генераторов в Python. Оно позволяет вам создавать итерируемые объекты без явного создания списка.
Чтобы обновить предыдущий пример с использованием генераторного выражения, вот как выглядит код:
Вы можете заметить, что код становится более компактным и выразительным. В этой реализации вы создаете новый список с помощью генераторного выражения. Генераторное выражение item for sublist in matrix for item in sublist
создает новый список, перебирая вложенные списки в matrix
и добавляя каждый элемент из вложенного списка в создаваемый список.
Теперь запустите следующий код, чтобы проверить, что функция flatten_generator()
также разворачивает список списков:
Вывод:
Вы снова увидите, что функция выполняет разворачивание списка списков.
Разворачивание списка с помощью стандартной библиотеки и встроенных инструментов
Помимо цикла for
и генераторного выражения, существуют и другие способы развернуть список списков в Python с использованием инструментов, предоставленных стандартной библиотекой.
Цепочка итерируемых объектов с помощью itertools.chain()
Модуль itertools
в стандартной библиотеке предоставляет функцию chain()
, которая позволяет объединять несколько итерируемых объектов в один последовательный итератор. Вы можете использовать chain()
для развертывания списка списков следующим образом:
В этой реализации вы импортируете модуль itertools
и затем используете функцию chain()
, чтобы объединить все вложенные списки из matrix
в один последовательный итератор. Затем вы преобразуете итератор в список с помощью list()
.
Давайте проверим, что функция разворачивает список списков:
Вывод:
Функция flatten_chain()
разворачивает список списков.
Конкатенация списков с помощью functools.reduce()
Модуль functools
в стандартной библиотеке предоставляет функцию reduce()
, которая позволяет применять функцию к двум элементам списка, а затем к результату и следующему элементу. Вы можете использовать reduce()
в сочетании с оператором конкатенации (+
) для развертывания списка списков:
В этой реализации вы импортируете модуль functools
и затем используете функцию reduce()
. Функция lambda x, y: x + y
принимает два аргумента x
и y
и просто конкатенирует их. Затем вы применяете reduce()
к matrix
, что приводит к последовательной конкатенации всех вложенных списков.
Давайте проверим, что функция разворачивает список списков:
Вывод:
Функция flatten_reduce()
разворачивает список списков.
Использование sum()
для объединения списков
Встроенная функция sum()
может быть использована для объединения списков, хотя эта реализация не является самой эффективной:
В этой реализации вы просто вызываете sum()
со списком matrix
и пустым списком []
в качестве начальной суммы. sum()
применяет операцию сложения к элементам matrix
и начальной сумме, и возвращает результирующий список.
Давайте проверим, что функция разворачивает список списков:
Вывод:
Функция flatten_sum()
разворачивает список списков.
Учет производительности при развертывании списков
Когда вы разворачиваете большие списки или списки списков, производительность может стать проблемой. Однако, в зависимости от вашего конкретного случая использования и объема данных, различные методы развертывания могут иметь различные производительные характеристики.
Тестирование производительности и проведение сравнительного анализа времени выполнения могут помочь вам выбрать наиболее подходящий метод для вашего случая.
Разворачивание списков Python для науки о данных с помощью NumPy
Если вы работаете с данными и занимаетесь наукой о данных в Python, то NumPy, библиотека для научных вычислений, может предоставить более эффективные и удобные инструменты для разворачивания списков.
Вот как вы можете использовать NumPy для разворачивания списка списков:
В этой реализации вы импортируете библиотеку NumPy как np
. Затем вы используете функцию ravel()
из NumPy для разворачивания списка списков. Функция ravel()
возвращает одномерный массив NumPy. Затем вы преобразуете массив NumPy обратно в список с помощью tolist()
.
Давайте проверим, что функция разворачивает список списков:
Вывод:
Функция flatten_numpy()
разворачивает список списков с использованием библиотеки NumPy.
Заключение
В этом руководстве вы узнали различные способы развертывания списка списков в Python. Вы изучили, как развернуть список списков с помощью цикла for
, генераторного выражения и инструментов, предоставляемых стандартной библиотекой. Вы также рассмотрели некоторые соображения о производительности при разворачивании списков и узнали о том, как воспользоваться библиотекой NumPy для разворачивания списка списков для науки о данных.
Теперь у вас есть знания и инструменты, чтобы успешно развернуть список списков в Python в любом случае использования.