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

Зведення Двовимірного Масиву в Одновимірний: Різні Підходи

Трансформація двовимірної структури даних (масиву) в одновимірну, що називається зведенням, є поширеним завданням у програмуванні. Існує кілька методів для досягнення цієї мети, кожен з яких має свої переваги та особливості.

У цій статті ми розглянемо декілька популярних підходів до зведення двовимірних масивів.

Розгляньмо наступний приклад для наочності:

Вхідні дані:

[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]

Очікуваний результат:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

#1. Застосування Циклів

Одним із найпростіших та інтуїтивно зрозумілих способів зведення є використання циклів. Цей підхід дозволяє послідовно перебирати елементи двовимірного масиву та додавати їх до одновимірного списку.

Розглянемо покроковий алгоритм:

  • Ініціалізуємо двовимірний масив з тестовими даними та назвемо його, наприклад, data.
  • Створюємо порожній список flat_list, в який будемо зберігати зведені елементи.
  • Ітеруємо по data. Для кожного підсписку:
    • Розпаковуємо всі елементи поточного підсписку.
    • Додаємо розпаковані елементи до flat_list.
  • Виводимо на екран отриманий одновимірний список flat_list.

Нижче наведено приклад коду для цього алгоритму:

# Ініціалізація даних та порожнього списку
data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
flat_list = []

# Ітерація по масиву data
for item in data:
    # Додавання елементів до flat_list
    flat_list += item

# Виведення результату
print(flat_list)

Замість оператора конкатенації (+=), можна використовувати вкладений цикл для додавання елементів підсписку до flat_list. Також можливо скористатися списковими включеннями (list comprehension) для більш лаконічного коду, який виконує ту ж саму функцію.

Далі ми розглянемо альтернативний підхід до зведення масивів.

#2. Використання itertools.chain

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

Розглянемо алгоритм:

  • Ініціалізуємо двовимірний масив з тестовими даними.
  • Отримуємо ітератор flatten за допомогою виклику itertools.chain(*data).
  • Перетворюємо отриманий ітератор в список.
  • Виводимо на екран отриманий одновимірний список.

Код, що ілюструє цей підхід:

# Імпорт необхідного модуля
import itertools

# Ініціалізація даних
data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]

# Зведення списку та збереження результату
flat_list = itertools.chain(*data)

# Перетворення ітератора в список та виведення
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, яка:
    • Перевіряє елементи заданого списку.
    • Якщо елемент є списком, викликає рекурсивно flatten_list з цим елементом.
    • Якщо елемент не є списком, додає його до flat_list.
  • Викликаємо функцію flatten_list з початковими даними.
  • Виводимо flat_list.

Код реалізації:

# Ініціалізація даних та порожнього списку
data = [1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
flat_list = []

# Рекурсивна функція
def flatten_list(data):
    # Ітерація по елементах
    for element in data:
        # Перевірка чи є елемент списком
        if type(element) == list:
            # Рекурсивний виклик функції для списку
            flatten_list(element)
        else:
            flat_list.append(element)

# Виклик функції
flatten_list(data)

# Виведення результату
print(flat_list)

Важливо пам’ятати, що ми створюємо новий список, а не змінюємо оригінальний.

Висновок

У цій статті ми розглянули різні підходи до зведення двовимірних та багаторівневих масивів у Python. Кожен метод має свої особливості та ефективність в залежності від конкретного завдання. Сподіваємося, що цей матеріал був корисним і допоможе вам у вашій роботі.

Бажаємо успіхів у програмуванні!