Вступ
А Список вважається однією з найбільш гнучких структур даних у мові програмування Python. З іншого боку, двовимірний список або 2D-список, який зазвичай називають списком списків, є об’єктом списку, де кожен елемент сам є списком. Наприклад: [[19, 18, 17], [16, 15, 14], [13, 12, 11]].
Зведення списку списків — це процес перетворення двовимірного списку в одновимірний шляхом скасування вкладення кожного елемента списку, що зберігається в списку списків, тобто перетворення [[9, 8, 7], [6 , 5, 4], [3, 2, 1]] до [9, 8, 7, 6, 5, 4, 3, 2, 1].
Ми можемо виконати процес сплющування за допомогою вкладених для цикли, рекурсія, розуміння списків, основні функції або імпорт бібліотек або пакетів у Python щодо глибини та регулярності вкладених списків.
У цьому посібнику ми розглянемо різні методи зведення вкладених списків за допомогою мови програмування Python. Але перш ніж ми почнемо, давайте розберемося з типами вкладених списків.
Які бувають типи вкладених списків?
Як ми знаємо, Python є слабо типізованою мовою програмування. Таким чином, ми можемо зустріти два типи List of Lists. Ці списки списків або вкладені списки такі:
- Звичайний список списків
- Нерегулярний список списків
Звичайний список списків
Кожен елемент у звичайному списку списків називається підсписком, таким чином дотримуючись однорідності типу елемента. Наприклад: [[9, 8, 7], [6, 5, 4], [3, 2, 1]] є звичайним списком списків як [9, 8, 7], [6, 5, 4] , [3, 2, 1] має тип списку.
Нерегулярний список списків
javascript для циклу
Кожний елемент у нестандартному списку списків називається або підсписком, або елементом, що не є списком (наприклад, рядок або ціле число). Таким чином, є нерегулярність щодо типу елемента. Наприклад: [[9, 8, 7], [6, 5], 4, 3] є нерегулярним списком списків, оскільки [9, 8, 7] і [6, 5] належать до типів списків, тоді як 4 і 3 мають тип int.
Зведення списку списків за допомогою вкладених циклів for
Зведення списку списків із вкладеним для Допомога циклів вважається підходом грубої сили для отримання плоского списку. Ми можемо виконати цей метод, вибравши кожен елемент із двовимірного списку та впорядкувавши його в одновимірному списку.
Давайте розглянемо наступний приклад, який працює як для звичайних, так і для нерегулярних списків списків.
приклад:
# defining the function def flattenlist(_2dlist): # defining an empty list flatlist = [] # Iterating through the outer list for item in _2dlist: if type(item) is list: # If the item is of the list type, iterating through the sub-list for element in item: flatlist.append(element) else: flatlist.append(item) return flatlist # defining the nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]] print('Genuine List:', nestedlist) print('Converted Flat List:', flattenlist(nestedlist))
Вихід:
Genuine List: [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]] Converted Flat List: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
Пояснення:
У наведеному вище прикладі ми визначили функцію як плоский список який приймає параметр як _2dlist . Ми потім використовували для цикл для повторення елементів вкладеного списку та додавання їх для створення зведеного списку. Потім ми визначили вкладений список і реалізували його плоский список функція. У результаті вкладений список успішно трансформувався у зведений список.
Зведення вкладеного списку за допомогою розуміння списку
Зведення списку списків за допомогою Розуміння списку вважається елегантним підходом до отримання плоского списку залежно від двовимірного існуючого списку. Однак цей підхід пропонує менш інтуїтивне рішення.
Розглянемо наступний приклад.
приклад:
# defining the nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90]] # list comprehension flatlist = [element for sub_list in nestedlist for element in sub_list] print('Genuine list:', nestedlist) print('Converted list:', flatlist)
Вихід:
Genuine list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] Converted list: [10, 20, 30, 40, 50, 60, 70, 80, 90]
Пояснення:
У наведеному вище прикладі ми визначили вкладений список і розуміння списку. Потім ми роздрукували їх для користувачів. У результаті вкладений список було успішно перетворено на зведений список.
Зведення списку списків за допомогою рекурсивного методу
Ми також можемо використовувати рекурсивний метод для зведення двовимірного списку. Розглянемо наступний приклад реалізації рекурсивного методу для зведення списку списків. Ця реалізація добре працює як для звичайного, так і для нерегулярного списку списків.
приклад:
# defining a function def flattenlist(nestedlist): if len(nestedlist) == 0: return nestedlist if isinstance(nestedlist[0], list): return flattenlist(nestedlist[0]) + flattenlist(nestedlist[1:]) return nestedlist[:1] + flattenlist(nestedlist[1:]) print(flattenlist([[10, 20, 30, 40], [50, 60, 70], [80, 90], 100]))
Вихід:
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
Пояснення:
У наведеному вище прикладі ми визначили функцію та використали якщо заява вказуючи, якщо довжина вкладеного списку дорівнює нулю, тоді повертає вкладений список.
хакерська обробка
Якщо елемент даних із нульовим індексом є екземпляром списку, тоді індекс списку знову переходить у функцію та додається до наступного індексу списку тощо. Інакше функція повертатиме елементи тощо. Нарешті ми визначили вкладений список і виконали функцію. У результаті список списків рекурсивно зрівнявся.
Використання бібліотек Python
Ми також можемо використати деякі з бібліотек мови програмування Python, щоб вирівняти список списків. Реалізація цих бібліотек описана нижче:
Зведення списку списків за допомогою функціональних інструментів і бібліотек операторів
The оператор бібліотека надає iconcat() функція для виконання фундаментальної операції, наприклад конкатенації. Ми можемо застосувати цю функцію кумулятивно до елементів даних вкладеного списку, зліва направо, що призведе до скорочення вкладеного списку до зведеного списку.
Розглянемо наступний приклад, щоб зрозуміти його реалізацію.
приклад:
# importing the required libraries import operator import functools regularlist = [] # Converting the list of lists into a flattened one. def convo(nestedlist): for element in nestedlist: if type(element) is list: regularlist.append(element) else: regularlist.append([element]) return regularlist twoDlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100], 110] regular2Dlist = convo(twoDlist) print('Given List:', twoDlist) print('Converted list:', functools.reduce(operator.iconcat, regular2Dlist, []))
Вихід:
Given List: [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100], 110] Converted list: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110]
Пояснення:
У наведеному вище прикладі ми імпортували functools бібліотека разом з ім оператор бібліотека. Потім ми визначили порожній список як регулярний список . Потім ми визначили функцію як конво щоб перетворити список списків на зведений список. У цій функції ми використали для цикл, де елементи з вкладеного списку додаються до порожнього списку, який ми визначили раніше. Пізніше ми визначили вкладений список і виконували функцію. У результаті список списків успішно перетворюється на зведений список.
Зведення списку списків за допомогою бібліотеки itertools
The itertools бібліотека надає ланцюг() функція, яка ідеально дозволяє нам перетворити вкладений список в єдиний зведений список. Ця функція обробляє послідовні серії як одну серію, ітеруючи їх через iterable, переданий як параметр послідовним способом.
Розглянемо такий приклад:
приклад:
# importing the itertools library import itertools # defining the nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]] flattenlist = list(itertools.chain(*nestedlist)) print('The nested list:', nestedlist) print('The flattened list:', flattenlist
Вихід:
The nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]] The flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
Пояснення:
У наведеному вище прикладі ми імпортували itertools бібліотеку та створив вкладений список. Потім ми використали ланцюг() функція для перетворення заданого вкладеного списку в зведений список. Нарешті ми повернули користувачам результат. У результаті список списків успішно зведено.
Зведення списку списків за допомогою бібліотеки NumPy
The NumPy Бібліотека забезпечує різноманітні повсякденні операції, включаючи конкатенацію двовимірних регулярних масивів по стовпцях або по рядках. Ми будемо використовувати атрибут, відомий як плоский щоб отримати одновимірний ітератор над масивом для перемоги над ціллю. Розглянемо наступний приклад, щоб зрозуміти використання функції конкатенації та атрибута flat.
приклад:
# importing the library import numpy # defining the nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90]] # using the concatenate function along with the flat attribute flattenlist = list(numpy.concatenate(nestedlist).flat) print('The Nested list:', nestedlist) print('The Flattened list:', flattenlist)
Вихід:
The Nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] The Flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90]
Пояснення:
У наведеному вище прикладі ми імпортували numpy бібліотеку та визначив вкладений список. Потім ми використали зчепити функція numpy бібліотека разом із власн плоский атрибут для зведення елементів вкладеного списку та об’єднання їх у новий зведений список. Нарешті ми надрукували результат для користувачів. Таким чином, список списків успішно зведений.
спробуйте зловити java
Використання основних функцій
Ми також можемо виконати завдання зведення, використовуючи деякі основні функції, які надає мова програмування Python.
Зведення списку списків за допомогою функції sum
Ми можемо розглядати підсумовування внутрішніх списків як інше вирішення проблеми. Ми передаємо два аргументи сума функція: Першим параметром є ітерований , який є вкладеним списком, а другим параметром є почати який є недійсним списком для наступного випадку, який служить початковим плоским списком, до якого додаватимуться елементи даних внутрішніх підсписків.
Можна сказати, що такий підхід досить зручний, оскільки нам не потрібно нічого імпортувати. Однак це повільніше, ніж itertools() і ланцюг() функціонує, коли у вкладеному списку є велика кількість підсписків.
Розглянемо такий приклад:
приклад:
# defining a nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90]] # using the sum function flattenlist = sum(nestedlist, []) print('The Nested list:', nestedlist) print('The Flattened list:', flattenlist)
Вихід:
The Nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] The Flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90]
Пояснення:
У наведеному вище прикладі ми визначили вкладений список. Потім ми використали сума() і зводив вкладений список в одновимірний список, а також виводив результуючий список для користувачів. У результаті ми успішно перетворили список списків на плоский список.
Зведення списку списків за допомогою ключового слова Lambda
Ми можемо визначити анонімну функцію за допомогою ключового слова лямбда . Ми можемо передати регулярний/нерегулярний список як параметр цій анонімній функції. Обчислення виразу виконується для отримання плоского одновимірного списку.
Розглянемо такий приклад:
приклад:
# Defining the nested list nestedlist = [[10, 20, 30], [30, 50, 60], [40, 60, 70], 70] # Using lambda parameters: expression flattenlist = lambda nestedlist:[item for element in nestedlist for item in flattenlist(element)] if type(nestedlist) is list else [nestedlist] print('The Nested list:', nestedlist) print('The Flattened List:', flattenlist(nestedlist))
Вихід:
обрізка рядка java
The Nested list: [[10, 20, 30], [30, 50, 60], [40, 60, 70], 70] The Flattened List: [10, 20, 30, 30, 50, 60, 40, 60, 70, 70]
Пояснення:
У наведеному вище прикладі ми визначили вкладений список. Потім ми використали лямбда ключове слово разом із аргументом, що визначає вираз для розуміння списку. Потім ми роздрукували їх для користувачів. У результаті ми успішно перетворили двовимірний нерегулярний список у зведений список.