logo

Spłaszcz listę w Pythonie

Wstęp

A Lista jest uważana za jedną z najbardziej elastycznych struktur danych w języku programowania Python. Z drugiej strony lista dwuwymiarowa, czyli lista 2D, ogólnie nazywana listą list, jest obiektem listy, której każdy element sam w sobie jest listą. Na przykład: [[19, 18, 17], [16, 15, 14], [13, 12, 11]].

Spłaszczanie listy list to proces przekształcania listy dwuwymiarowej w listę jednowymiarową poprzez usunięcie zagnieżdżenia każdego elementu listy przechowywanego na liście list, to znaczy przekształcenie [[9, 8, 7], [6 , 5, 4], [3, 2, 1]] do [9, 8, 7, 6, 5, 4, 3, 2, 1].

Proces spłaszczania możemy wykonać za pomocą zagnieżdżenia Do pętle, rekurencja, rozumienie list, podstawowe funkcje lub importowanie bibliotek lub pakietów w Pythonie na głębokość i regularność list zagnieżdżonych.

W tym samouczku będziemy pracować nad różnymi metodami spłaszczania zagnieżdżonych list przy użyciu języka programowania Python. Zanim jednak zaczniemy, przyjrzyjmy się typom list zagnieżdżonych.

Jakie są typy list zagnieżdżonych?

Jak wiemy, Pyton jest słabo typowanym językiem programowania. Dlatego możemy spotkać dwa typy List list. Te listy list lub list zagnieżdżonych są następujące:

  1. Zwykła lista list
  2. Nieregularna lista list

Zwykła lista list

Każda pozycja na Liście Regularnej list nazywana jest Sublistą, zachowując w ten sposób jednolitość rodzaju elementu. Na przykład: [[9, 8, 7], [6, 5, 4], [3, 2, 1]] to zwykła lista list jako [9, 8, 7], [6, 5, 4] , [3, 2, 1] jest typu listowego.

Nieregularna lista list

TCP vs udp

Każdy element na nieregularnej liście list jest nazywany listą podrzędną lub elementem niebędącym listą (na przykład ciąg znaków lub liczba całkowita). Występuje zatem nieprawidłowość w zakresie rodzaju elementu. Na przykład: [[9, 8, 7], [6, 5], 4, 3] jest nieregularną listą, ponieważ [9, 8, 7] i [6, 5] należą do typów list, podczas gdy 4 i 3 są typu int.

Spłaszczanie listy list za pomocą zagnieżdżonych pętli for

Spłaszczanie listy list za pomocą zagnieżdżenia Do Pomoc pętli jest uważana za podejście brutalnej siły w celu uzyskania płaskiej listy. Możemy wykonać tę metodę, wybierając każdy element z Listy Dwuwymiarowej i układając go na Liście Jednowymiarowej.

Rozważmy następujący przykład, który działa zarówno w przypadku zwykłych, jak i nieregularnych list list.

Przykład:

 # 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)) 

Wyjście:

 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] 

Wyjaśnienie:

W powyższym przykładzie zdefiniowaliśmy funkcję jako lista spłaszczona który przyjmuje parametr jako _2dlista . Następnie skorzystaliśmy Do pętla do iteracji elementów zagnieżdżonej listy i dołączania ich w celu wygenerowania spłaszczonej listy. Następnie zdefiniowaliśmy listę zagnieżdżoną i zaimplementowaliśmy lista spłaszczona funkcjonować. W rezultacie lista zagnieżdżona została pomyślnie przekształcona w listę spłaszczoną.

Spłaszczanie listy zagnieżdżonej przy użyciu rozumienia listy

Spłaszczanie listy list za pomocą rozumienia listy jest uważane za eleganckie podejście do uzyskania płaskiej listy w zależności od istniejącej listy dwuwymiarowej. Jednak to podejście oferuje mniej intuicyjne rozwiązanie.

Rozważmy następujący przykład.

Przykład:

 # 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) 

Wyjście:

 Genuine list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] Converted list: [10, 20, 30, 40, 50, 60, 70, 80, 90] 

Wyjaśnienie:

W powyższym przykładzie zdefiniowaliśmy listę zagnieżdżoną i rozumienie list. Następnie wydrukowaliśmy je dla użytkowników. W rezultacie lista zagnieżdżona została pomyślnie przekształcona w listę spłaszczoną.

Spłaszczanie listy list metodą rekurencyjną

Możemy również użyć metody rekursywnej, aby spłaszczyć listę dwuwymiarową. Rozważmy następujący przykład implementacji metody rekurencyjnej w celu spłaszczenia listy list. Ta implementacja działa dobrze w przypadku zwykłych i nieregularnych list list.

Przykład:

 # 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])) 

Wyjście:

 [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 

Wyjaśnienie:

W powyższym przykładzie zdefiniowaliśmy funkcję i użyliśmy an Jeśli oświadczenie stwierdzając, czy długość zagnieżdżonej listy jest równa zero, a następnie zwróć zagnieżdżoną listę.

123 film

Jeśli element danych w indeksie zerowym jest instancją listy, wówczas indeks listy przechodzi ponownie do funkcji i dodaje się do kolejnego indeksu listy i tak dalej. W przeciwnym razie funkcja zwróci elementy i tak dalej. W końcu zdefiniowaliśmy zagnieżdżoną listę i wykonaliśmy funkcję. W rezultacie lista list uległa rekurencyjnemu spłaszczeniu.

Korzystanie z bibliotek Pythona

Możemy również wykorzystać niektóre biblioteki języka programowania Python, aby spłaszczyć listę list. Implementację tych bibliotek opisano poniżej:

Spłaszczanie listy list za pomocą narzędzi funkcyjnych i bibliotek operatorów

The operator biblioteka udostępnia ikonakot() funkcję wykonującą podstawową operację, taką jak łączenie. Możemy zastosować tę funkcję łącznie do elementów danych listy zagnieżdżonej, od lewej do prawej, co spowoduje redukcję listy zagnieżdżonej do listy spłaszczonej.

Rozważmy następujący przykład, aby zrozumieć jego implementację.

Przykład:

 # 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, [])) 

Wyjście:

 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] 

Wyjaśnienie:

W powyższym przykładzie zaimportowaliśmy plik narzędzia funkcyjne biblioteka wraz z operator biblioteka. Następnie zdefiniowaliśmy pustą listę jako regularna lista . Następnie zdefiniowaliśmy funkcję jako rozmowa aby przekształcić listę list w listę spłaszczoną. W tej funkcji użyliśmy Do pętla, w której elementy z zagnieżdżonej listy są dołączane do pustej listy, którą zdefiniowaliśmy wcześniej. Później zdefiniowaliśmy zagnieżdżoną listę i wykonujemy funkcję. W rezultacie lista list została pomyślnie przekonwertowana na listę spłaszczoną.

Spłaszczanie listy list przy użyciu biblioteki itertools

The itertools biblioteka udostępnia łańcuch() funkcja, która pozwala nam idealnie przekształcić zagnieżdżoną listę w pojedynczą spłaszczoną listę. Ta funkcja traktuje kolejne serie jako pojedynczą serię, iterując je poprzez iterację przekazaną jako parametr w sposób szeregowy.

Rozważmy następujący przykład:

Przykład:

 # 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 

Wyjście:

 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] 

Wyjaśnienie:

W powyższym przykładzie zaimportowaliśmy plik itertools bibliotekę i wygenerowałem zagnieżdżoną listę. Następnie skorzystaliśmy z łańcuch() funkcja konwertująca daną listę zagnieżdżoną na listę spłaszczoną. W końcu zwróciliśmy wynik użytkownikom. W rezultacie lista list została pomyślnie spłaszczona.

123 film

Spłaszczanie listy list przy użyciu biblioteki NumPy

The NumPy biblioteka zapewnia różne codzienne operacje, w tym łączenie dwuwymiarowych regularnych tablic w kolumnach lub wierszach. Będziemy używać atrybutu znanego jako płaski w celu uzyskania jednowymiarowego iteratora w tablicy w celu podbicia celu. Rozważmy następujący przykład, aby zrozumieć użycie funkcji konkatenacji i atrybutu płaskiego.

Przykład:

 # 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) 

Wyjście:

 The Nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] The Flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90] 

Wyjaśnienie:

W powyższym przykładzie zaimportowaliśmy plik tępy bibliotekę i zdefiniowałem listę zagnieżdżoną. Następnie skorzystaliśmy z powiązać funkcja tępy biblioteka wraz z jej płaski atrybut, aby spłaszczyć elementy zagnieżdżonej listy i połączyć je w nową spłaszczoną listę. W końcu wydrukowaliśmy wynik dla użytkowników. W ten sposób lista list została pomyślnie spłaszczona.

Korzystanie z podstawowych funkcji

Możemy również wykonać zadanie spłaszczania, wykorzystując podstawowe funkcje dostępne w języku programowania Python.

Spłaszczanie listy list za pomocą funkcji sumy

Sumowanie po listach wewnętrznych możemy rozważyć jako kolejne rozwiązanie problemu. Do metody przekazujemy dwa argumenty suma funkcja: Pierwszym parametrem jest iterowalne , która jest listą zagnieżdżoną, a drugim parametrem jest początek która jest pustą listą dla następującego przypadku, która służy jako początkowa płaska lista, do której zostaną dodane elementy danych z wewnętrznych list podrzędnych.

Można powiedzieć, że to podejście jest całkiem wygodne, ponieważ nie musimy niczego importować. Jest jednak wolniejszy niż np itertools() I łańcuch() działa, gdy na liście zagnieżdżonej znajduje się duża liczba list podrzędnych.

Rozważmy następujący przykład:

Przykład:

 # 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) 

Wyjście:

 The Nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] The Flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90] 

Wyjaśnienie:

W powyższym przykładzie zdefiniowaliśmy listę zagnieżdżoną. Następnie skorzystaliśmy z suma() funkcję i spłaszczył zagnieżdżoną listę w listę jednowymiarową i wydrukował wynikową listę dla użytkowników. W rezultacie pomyślnie przekształciliśmy listę list w listę płaską.

Spłaszczanie listy list za pomocą słowa kluczowego Lambda

Funkcję anonimową możemy zdefiniować za pomocą słowa kluczowego lambda . Możemy przekazać listę regularną/nieregularną jako parametr tej anonimowej funkcji. Ocena wyrażenia odbywa się w celu uzyskania płaskiej Listy Jednowymiarowej.

Rozważmy następujący przykład:

jvm w Javie

Przykład:

 # 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)) 

Wyjście:

 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] 

Wyjaśnienie:

W powyższym przykładzie zdefiniowaliśmy listę zagnieżdżoną. Następnie skorzystaliśmy z lambda słowo kluczowe wraz z argumentem definiującym wyrażenie do rozumienia listy. Następnie wydrukowaliśmy je dla użytkowników. W rezultacie pomyślnie przekonwertowaliśmy dwuwymiarową nieregularną listę na spłaszczoną listę.