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

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

[

Как развернуть список списков в Python

Как развернуть список списков при помощи цикла for

Для развертывания списка списков в Python можно использовать цикл for и метод .extend() для добавления элементов каждого вложенного списка в новый список.

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

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

Вы можете проверить работу этой функции, запустив следующий код:

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

Как развернуть список списков при помощи генератора списка

Кроме использования цикла for, вы можете воспользоваться генератором списка, чтобы развернуть список списков в одну строку кода:

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

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

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

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

Python также предлагает несколько инструментов из стандартной библиотеки и встроенных функций, которые позволяют развернуть список списков.

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

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

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

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

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

Конкатенация списков с помощью функции functools.reduce()

Модуль functools содержит функцию reduce(), которая позволяет объединить элементы итерируемого объекта в одну последовательность. Вы можете использовать эту функцию, чтобы развернуть список списков:

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

В этом примере мы импортируем модуль functools и определяем функцию flatten_reduce(). Внутри функции мы вызываем функцию reduce() из модуля functools и передаем ей анонимную функцию lambda x, y: x + y в качестве аргумента. Эта функция сложит два элемента x и y в каждой итерации. Затем мы преобразуем результат в список.

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

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

В Python вы также можете использовать встроенную функцию sum() для объединения списков в один:

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

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

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

Развертывание списков в Python для научных вычислений с NumPy

Если вы работаете с научными вычислениями в Python, то можете воспользоваться библиотекой NumPy для развертывания списков. NumPy предоставляет функцию flatten(), которая может быть использована для этой цели:

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

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

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

Учет производительности при развертывании списков

Если ваши списки очень большие или вы заботитесь о производительности, может быть полезно знать, какие методы развертывания списков в Python являются более эффективными.

flatten_extend(), flatten_comprehension(), flatten_chain() и flatten_reduce() являются хорошими выборами для развертывания небольших списков или в случаях, когда производительность не является первоочередной задачей.

Однако, если у вас есть огромные списки или вам нужно максимизировать производительность, использование NumPy с помощью функции flatten_numpy() может быть лучшим вариантом. NumPy обеспечивает быструю и эффективную работу с массивами числовых данных.

Заключение

В этой статье мы рассмотрели несколько способов развертывания списка списков в Python. Вы можете использовать цикл for, генератор списка, функцию itertools.chain(), функцию functools.reduce(), функцию sum() или библиотеку NumPy, в зависимости от ваших потребностей и требований производительности.

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