Посібник зі зведення списку та списку списків у Python

Перетворення двовимірного масиву в одновимірний називається зведенням. Є багато підходів до вирішення проблеми.

Ми розглянемо деякі з них у цьому підручнику.

Давайте розглянемо приклад.

Введення

[[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 замість оператора конкатенації. Ми також можемо використовувати розуміння списків замість циклів.

  Де знаходиться резервне копіювання мого iPhone або iPad на ПК або Mac?

Обидва виконують однакову роботу. Розглянемо наступний спосіб вирішення проблеми.

#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. Зведення багаторівневих списків

Ми бачили, як звести список списків. Наведені вище методи зведення списку, які ми обговорювали, не працюватимуть для багаторівневих списків. Давайте розглянемо приклад.

  Як знайти та видалити дублікати фотографій на вашому iPhone

Введення

[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, щоб перевірити результат.
  Чи приймає Quest Diagnostics Walk Ins?

Фу! багато кроків для кодування. не хвилюйся Перетворення наведених вище операторів у код не займе більше хвилин.

# 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, але я відчув, що наведені вище є, мабуть, найпростішими.

Щасливого кодування 🙂