Перетворення двовимірного масиву в одновимірний називається зведенням. Є багато підходів до вирішення проблеми.
Ми розглянемо деякі з них у цьому підручнику.
Давайте розглянемо приклад.
Введення
[[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.
Ланцюжок методів повторює кожен підсписок і повертає елементи, поки в ньому не буде жодного підсписку. Він повертає ітерацію, яку ми маємо перетворити на список.
Давайте розглянемо етапи вирішення проблеми.
- Ініціалізуйте список списків фіктивними даними та назвіть його даними.
- Отримайте ітерацію flatten за допомогою 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, але я відчув, що наведені вище є, мабуть, найпростішими.
Щасливого кодування 🙂