Преобразование 2D-массива в 1D-массив называется выравниванием. Существует множество подходов к решению проблемы.
Мы рассмотрим некоторые из них в этом уроке.
Давайте посмотрим пример.
Вход
[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
Выход
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Оглавление
№1. Петли
Наиболее распространенный способ решения проблемы — использование циклов. Я думаю, что большинство из вас уже поняли это. Давайте посмотрим, как решить проблему с помощью циклов.
- Инициализируйте список списков с фиктивными данными и назовите его как данные.
- Теперь инициализируйте пустой список с именем flat_list.
- Итерация по данным.
- Распаковать все элементы из текущего списка.
- Добавьте их в flat_list, используя метод добавления списка.
- Распечатайте результат.
См. код проблемы ниже.
# initializing the data and an empty list data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]] flat_list = [] # iterating over the data for item in data: # appending elements to the flat_list flat_list += item # printing the resultantn flat_list print(flat_list)
Вы можете использовать другой цикл для добавления элементов подсписка в flat_list вместо оператора конкатенации. Мы также можем использовать списки вместо циклов.
Оба делают одну и ту же работу. Давайте посмотрим следующий способ решения проблемы.
№ 2. Itertools — Сеть
Мы будем использовать метод chain из встроенного модуля itertools.
Цепочка методов перебирает каждый подсписок и возвращает элементы до тех пор, пока в ней не останется подсписков. Он возвращает итерируемый объект, который мы должны преобразовать в список.
Давайте посмотрим на шаги, связанные с решением проблемы.
- Инициализируйте список списков с фиктивными данными и назовите его как данные.
- Получите итерацию сглаживания, используя itertools.chain(*data).
- Преобразуйте полученную итерацию в список.
- Распечатайте список выравнивания.
Вы можете просмотреть код в приведенном ниже фрагменте.
# importing the module import itertools # initializing the data data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]] # flattening the list and storing the result flat_list = itertools.chain(*data) # converting iterable to list and printing print(list(flat_list))
№3. Сведение многоуровневых списков
Мы видели, как сгладить список списков. Вышеупомянутые методы, которые мы обсуждали для выравнивания списка, не будут работать для многоуровневых списков. Давайте посмотрим пример.
Вход
[1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
Выход
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Поскольку мы не знаем глубины списков перед программой, мы должны использовать рекурсию для решения проблемы.
- Инициализируйте данные, как показано в примере, и назовите их как данные.
- Инициализируйте пустой список с именем flat_list.
- Напишите функцию с именем flatten_list.
- Перебрать элементы заданного списка.
- Если элемент представляет собой список, то снова рекурсивно вызовите ту же функцию.
- Если элемент не является списком, добавьте элемент в flat_list.
- Вызовите функцию с данными.
- Функция заполнит все элементы в списке flat_list.
- Распечатайте flat_list, чтобы проверить вывод.
Фу! много шагов для кода. Не волнуйся. Преобразование приведенных выше операторов в код не займет больше минуты.
# initializing the data and empty list data = [1, [2, 3, [4, 5]], 6, [[7], [8, 9]]] flat_list = [] # function def flatten_list(data): # iterating over the data for element in data: # checking for list if type(element) == list: # calling the same function with current element as new argument flatten_list(element) else: flat_list.append(element) # flattening the given list flatten_list(data) # printing the flat_list print(flat_list)
Помните, мы не преобразовывали существующий список. Вместо этого мы создали новый список с данным элементом списка.
Вывод
Надеюсь, вам понравился урок. Может быть много других способов сгладить список в Python, но я считаю, что приведенные выше, вероятно, самые простые.
Удачного кодирования 🙂