Пропустить до содержимого

Как легко выровнять список в Питоне?

CodeMDD.io

Как сделать список плоским в Python

Иногда при работе с данными у вас может быть список из вложенных списков. Одна из общих операций - сделать плоским этот список в одномерный список в Python. Сделать список плоским означает преобразовать многомерный список, такой как матрица, в одномерный список.

Чтобы лучше проиллюстрировать, что значит сделать список плоским, предположим, у вас есть следующая матрица числовых значений:

Python

>>> matrix = [
... [9, 3, 8, 3],
... [4, 5, 2, 8],
... [6, 4, 3, 1],
... [1, 0, 4, 5],
... ]

Переменная matrix содержит список в Python, который содержит четыре вложенных списка. Каждый вложенный список представляет собой строку в матрице. Строки содержат по четыре элемента или числа. Теперь предположим, что вы хотите преобразовать эту матрицу в следующий список:

Python

[9, 3, 8, 3, 4, 5, 2, 8, 6, 4, 3, 1, 1, 0, 4, 5]

Каким образом можно сделать список плоским и получить одномерный список, как показано выше? В этом руководстве вы узнаете, как сделать это в Python.

Как сделать список из списков плоским с помощью for Loop

Как можно сделать список из списков плоским в Python? В общем случае, чтобы сделать список из списков плоским, вы можете выполнить следующие шаги явно или неявно:

  1. Создать новый пустой список для хранения плоских данных.
  2. Итерироваться по каждому вложенному списку или подсписку в исходном списке.
  3. Добавить каждый элемент из текущего подсписка в список плоских данных.
  4. Вернуть полученный список с плоскими данными.

Чтобы продолжить с примером matrix, вот как вы бы перевели эти шаги в Python-код, используя цикл for и метод .extend():

Python

>>> def flatten_extend(matrix):
... flat_list = []
... for row in matrix:
... flat_list.extend(row)
... return flat_list
...

Внутри flatten_extend() вы сначала создаете новый пустой список с именем flat_list. Вы будете использовать этот список для хранения плоских данных, когда вы извлекаете их из matrix. Затем вы запускаете цикл для итерации по внутренним спискам из matrix. В этом примере вы используете имя row, чтобы представить текущий вложенный список.

На каждой итерации вы используете .extend(), чтобы добавить содержимое текущего подсписка в flat_list. Этот метод принимает итерируемый объект в качестве аргумента и добавляет его элементы в конец целевого списка.

Теперь запустите следующий код, чтобы проверить, что ваша функция выполняет свою работу:

>>> flattened = flatten_extend(matrix)
>>> print(flattened)
[9, 3, 8, 3, 4, 5, 2, 8, 6, 4, 3, 1, 1, 0, 4, 5]

Этот код вызывает функцию flatten_extend() с matrix в качестве аргумента и сохраняет результат в переменной flattened. Затем он печатает результат, который должен быть плоским списком, как показано выше.

![How to Flatten a List of Lists in Lists_Watermarked.2f9407737589.jpg)

Использование компрехеншена для преобразования списка из списков плоским

Кроме цикла for и метода .extend(), вы также можете использовать компрехеншен для создания плоского списка. Компрехеншен - это краткий способ создать новый список на основе существующего списка по определенным правилам.

В случае списка из списков можно использовать компрехеншен для перебора внешнего списка и всех его внутренних списков. Вы можете использовать вложенный компрехеншен, чтобы перебрать элементы внутренних списков и добавить их в новый плоский список.

Вот как выглядит компрехеншен для создания плоского списка из matrix:

>>> def flatten_comprehension(matrix):
... return [item for sublist in matrix for item in sublist]
...

Сначала вы определяете функцию flatten_comprehension(), которая принимает matrix в качестве аргумента. Затем вы возвращаете новый список, созданный с помощью компрехеншена.

Компрехеншен начинается с двух вложенных циклов: первый цикл перебирает внешний список (matrix), а второй цикл перебирает внутренние списки (sublist). Для каждого элемента внутреннего списка вы добавляете его в новый плоский список.

Проверьте следующий код, чтобы убедиться, что ваша функция работает правильно:

>>> flattened = flatten_comprehension(matrix)
>>> print(flattened)
[9, 3, 8, 3, 4, 5, 2, 8, 6, 4, 3, 1, 1, 0, 4, 5]

Как и раньше, этот код вызывает функцию flatten_comprehension() с matrix в качестве аргумента и печатает результат, который должен быть плоским списком.

Преобразование списка с использованием стандартных и встроенных инструментов

Помимо цикла for и компрехеншена, в Python также есть несколько стандартных и встроенных инструментов, которые можно использовать для преобразования списка из списков плоским.

Объединение итерируемых объектов с помощью itertools.chain()

Модуль itertools в Python предоставляет полезные инструменты для работы с итераторами и итерируемыми объектами. Один из таких инструментов - chain(), который может совмещать несколько итерируемых объектов в один.

Чтобы преобразовать список из списков в плоский список с помощью chain(), вам нужно сначала импортировать его из модуля itertools. Затем вы можете передать исходный список в chain() в качестве аргумента, чтобы объединить все его внутренние списки в один.

Пример применения chain() для преобразования matrix в плоский список:

>>> from itertools import chain
>>>
>>> def flatten_chain(matrix):
... return list(chain(*matrix))
...

В этом примере вы определяете функцию flatten_chain() и импортируете chain из itertools. Затем вы вызываете chain(*matrix), чтобы объединить все внутренние списки из matrix в один итерируемый объект. Наконец, вы используете list() для преобразования итерируемого объекта в плоский список.

Проверьте следующий код, чтобы убедиться, что ваша функция работает правильно:

>>> flattened = flatten_chain(matrix)
>>> print(flattened)
[9, 3, 8, 3, 4, 5, 2, 8, 6, 4, 3, 1, 1, 0, 4, 5]

Код вызывает функцию flatten_chain() с matrix в качестве аргумента и печатает результат, который должен быть плоским списком.

Конкатенация списков с использованием functools.reduce()

Модуль functools в Python предоставляет функции высшего порядка, которые можно использовать для работы с функциями. Один из таких инструментов - reduce(), который позволяет применять функцию и последовательно объединять элементы последовательности.

Чтобы преобразовать список из списков в плоский список с помощью reduce(), вам нужно сначала импортировать его из модуля functools. Затем вы можете передать исходный список и функцию объединения в reduce(), чтобы последовательно объединять внутренние списки в один.

Пример применения reduce() для преобразования matrix в плоский список:

>>> from functools import reduce
>>>
>>> def flatten_reduce(matrix):
... return reduce(lambda x, y: x + y, matrix)
...

В этом примере вы определяете функцию flatten_reduce() и импортируете reduce из functools. Затем вы вызываете reduce() с лямбда-функцией, которая принимает два аргумента и выполняет конкатенацию. Функция reduce() последовательно объединяет внутренние списки из matrix, используя переданную лямбда-функцию.

Проверьте следующий код, чтобы убедиться, что ваша функция работает правильно:

>>> flattened = flatten_reduce(matrix)
>>> print(flattened)
[9, 3, 8, 3, 4, 5, 2, 8, 6, 4, 3, 1, 1, 0, 4, 5]

Код вызывает функцию flatten_reduce() с matrix в качестве аргумента и печатает результат, который должен быть плоским списком.

Использование sum() для объединения списков

Функция sum() в Python обычно используется для вычисления суммы чисел. Однако, если передать список списков в sum(), она будет выполнять объединение вместо сложения.

Чтобы преобразовать список из списков в плоский список с помощью sum(), вы просто передаете его в sum() в качестве аргумента. Эта функция сложит все внутренние списки из matrix в один список.

Пример использования sum() для преобразования matrix в плоский список:

>>> def flatten_sum(matrix):
... return sum(matrix, [])
...

В этом примере вы определяете функцию flatten_sum(). Внутри функции вы вызываете sum() с matrix в качестве аргумента и пустым списком [] в качестве начального значения. При использовании пустого списка в качестве начального значения sum() будет выполнять объединение списков в плоский список.

Проверьте следующий код, чтобы убедиться, что ваша функция работает правильно:

>>> flattened = flatten_sum(matrix)
>>> print(flattened)
[9, 3, 8, 3, 4, 5, 2, 8, 6, 4, 3, 1, 1, 0, 4, 5]

Код вызывает функцию flatten_sum() с matrix в качестве аргумента и печатает результат, который должен быть плоским списком.

Рассмотрение производительности при преобразовании ваших списков

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

Обычно itertools.chain() является наиболее эффективным вариантом, так как он не создает новый список и выполняет объединение на лету. Однако, для маленьких списков разница в производительности может быть незначительной.

Если вам нужно преобразовать большие списки или работать с высокоэффективными алгоритмами, то itertools.chain() может быть предпочтительным выбором.

Преобразование списков в Python для анализа данных с помощью NumPy

NumPy - это библиотека Python для работы с массивами и матрицами. Она обеспечивает высокую производительность и может быть очень полезна при работе с данными.

Чтобы преобразовать список из списков в плоский список для анализа данных с помощью NumPy, вы можете использовать функцию numpy.flatten(). Эта функция преобразует многомерные массивы в одномерные.

Вот пример использования numpy.flatten() для преобразования matrix в плоский список:

>>> import numpy as np
>>>
>>> def flatten_numpy(matrix):
... return np.array(matrix).flatten().tolist()
...

В этом примере вы импортируете NumPy, определяете функцию flatten_numpy() и вызываете np.array(matrix).flatten().tolist(). Сначала вы преобразуете matrix в массив NumPy с помощью np.array(), затем используете .flatten(), чтобы сделать его одномерным, и, наконец, преобразуете его обратно в плоский список с помощью .tolist().

Проверьте следующий код, чтобы убедиться, что ваша функция работает правильно:

>>> flattened = flatten_numpy(matrix)
>>> print(flattened)
[9, 3, 8, 3, 4, 5, 2, 8, 6, 4, 3, 1, 1, 0, 4, 5]

Код вызывает функцию flatten_numpy() с matrix в качестве аргумента и печатает результат, который должен быть плоским списком.

Заключение

В этой статье вы узнали несколько способов сделать список из списков плоским в Python. Вы использовали цикл for, компрехеншен, стандартные инструменты и библиотеку NumPy для преобразования ваших списков.

Каждый из этих способов имеет свои преимущества и недостатки, поэтому выбор наиболее подходящего способа зависит от ваших потребностей и требований производительности.

Теперь, когда вы знаете, как сделать список плоским в Python, вы можете применить эти знания в своих проектах и работе с данными.

Remove ads

Liked it Disliked it