Зведення Двовимірного Масиву в Одновимірний: Різні Підходи
Трансформація двовимірної структури даних (масиву) в одновимірну, що називається зведенням, є поширеним завданням у програмуванні. Існує кілька методів для досягнення цієї мети, кожен з яких має свої переваги та особливості.
У цій статті ми розглянемо декілька популярних підходів до зведення двовимірних масивів.
Розгляньмо наступний приклад для наочності:
Вхідні дані:
[[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. Кожен метод має свої особливості та ефективність в залежності від конкретного завдання. Сподіваємося, що цей матеріал був корисним і допоможе вам у вашій роботі.
Бажаємо успіхів у програмуванні!