En introduktion
EN Liste betragtes som en af de mest fleksible datastrukturer i programmeringssproget Python. På den anden side er en todimensionel liste eller 2D-liste, som generelt betegnes som en liste over lister, et objekt af en liste, hvor hvert element er en liste i sig selv. For eksempel: [[19, 18, 17], [16, 15, 14], [13, 12, 11]].
Udfladning af en liste over lister er en proces med at transformere en todimensionel liste til en endimensionel liste ved at fjerne indlejring af hvert listeelement på listen over lister, dvs. transformere [[9, 8, 7], [6] , 5, 4], [3, 2, 1]] til [9, 8, 7, 6, 5, 4, 3, 2, 1].
Vi kan udføre fladningsprocessen ved hjælp af den nestede til loops, rekursion, listeforståelser, kernefunktioner eller import af biblioteker eller pakninger i Python på dybden og regelmæssigheden af de indlejrede lister.
I denne vejledning vil vi arbejde på forskellige metoder for at udjævne de indlejrede lister ved hjælp af Python-programmeringssproget. Men før vi går i gang, lad os forstå typerne af indlejrede lister.
Hvilke typer indlejrede lister er der?
Som vi ved, Python er et svagt indtastet programmeringssprog. Derfor kan vi støde på to typer af Lister. Disse liste over lister eller indlejrede lister er som følger:
- Almindelig liste over lister
- Uregelmæssig Liste over Lister
Almindelig liste over lister
Hvert element i den almindelige liste over lister omtales som en underliste, og observerer således ensartetheden af elementets type. For eksempel: [[9, 8, 7], [6, 5, 4], [3, 2, 1]] er en almindelig liste over lister som [9, 8, 7], [6, 5, 4] , [3, 2, 1] er af listetypen.
Uregelmæssig Liste over Lister
1 million i cifre
Hvert element i den uregelmæssige liste over lister omtales enten som en underliste eller et ikke-listeelement (for eksempel en streng eller et heltal). Der er således en uregelmæssighed med hensyn til elementtypen. For eksempel: [[9, 8, 7], [6, 5], 4, 3] er en uregelmæssig liste over lister, da [9, 8, 7] og [6, 5] er af listetyperne, mens 4 og 3 er af typen int.
Udjævning af listen over lister ved hjælp af Nested for Loops
Udjævning af listen over lister med de indlejrede til Loops' hjælp betragtes som en brute force tilgang til at opnå en flad liste. Vi kan udføre denne metode ved at vælge hvert element fra den todimensionelle liste og arrangere det i en endimensionel liste.
Lad os overveje følgende eksempel, der fungerer for både almindelige såvel som uregelmæssige lister.
Eksempel:
# 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))
Produktion:
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]
Forklaring:
I ovenstående eksempel har vi defineret en funktion som fladeliste der indtager en parameter som _2dliste . Vi har så brugt til loop for at gentage elementerne i den indlejrede liste og tilføje dem for at generere en fladtrykt liste. Vi har derefter defineret den indlejrede liste og implementeret fladeliste fungere. Som et resultat er den indlejrede liste med succes transformeret til den fladtrykte liste.
Udjævning af den indlejrede liste ved hjælp af en listeforståelse
Udjævning af listen over lister ved hjælp af en listeforståelse betragtes som en elegant tilgang til at opnå en flad liste afhængigt af en todimensionel eksisterende liste. Denne tilgang tilbyder dog en mindre intuitiv løsning.
Lad os overveje følgende eksempel.
Eksempel:
# 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)
Produktion:
Genuine list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] Converted list: [10, 20, 30, 40, 50, 60, 70, 80, 90]
Forklaring:
I ovenstående eksempel har vi defineret en indlejret liste og listeforståelse. Vi har så printet dem til brugerne. Som et resultat er den indlejrede liste blevet transformeret til den fladtrykte liste.
Udjævning af listen over lister ved hjælp af den rekursive metode
Vi kan også bruge den rekursive metode til at udjævne den todimensionelle liste. Lad os overveje følgende eksempel på implementering af den rekursive metode for at udjævne listen over lister. Denne implementering fungerer godt til både almindelige og uregelmæssige lister.
Eksempel:
# 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]))
Produktion:
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
Forklaring:
I ovenstående eksempel har vi defineret en funktion og brugt en hvis udmelding angiver, om længden af den indlejrede liste er lig med nul, returner derefter den indlejrede liste.
streng format java
Hvis dataelementet på det nulte indeks er en instans af en liste, så går listeindekset ind i funktionen igen og føjes til det følgende indeks på listen og så videre. Ellers vil funktionen returnere elementerne og så videre. Til sidst har vi defineret den indlejrede liste og udført funktionen. Som følge heraf er listen over lister fladet rekursivt ud.
Bruger Libraries of Python
Vi kan også bruge nogle af Python-programmeringssprogsbibliotekerne til at udjævne listen over lister. Implementeringen af disse biblioteker er beskrevet nedenfor:
Udjævning af listen over lister ved hjælp af funktionsværktøjer og operatørbiblioteker
Det operatør biblioteket leverer iconcat() funktion til at udføre den grundlæggende operation som sammenkædning. Vi kan anvende denne funktion kumulativt på dataelementerne i en indlejret liste, fra venstre mod højre, hvilket resulterer i reduktion af den indlejrede liste til en fladtrykt liste.
Lad os overveje følgende eksempel for at forstå dets implementering.
Eksempel:
# 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, []))
Produktion:
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]
Forklaring:
I ovenstående eksempel har vi importeret funktionsværktøjer bibliotek sammen med operatør bibliotek. Vi har derefter defineret en tom liste som regulær liste . Vi har så defineret en funktion som konvo for at omdanne listen over lister til en fladtrykt liste. I denne funktion har vi brugt til løkke, hvor elementerne fra den indlejrede liste føjes til den tomme liste, vi definerede tidligere. Senere har vi defineret den indlejrede liste og udfører funktionen. Som følge heraf konverteres listen over lister til en fladtrykt liste.
Udjævning af listen over lister ved hjælp af itertools-biblioteket
Det itertools biblioteket leverer kæde() funktion, der giver os mulighed for at transformere en indlejret liste til en enkelt fladtrykt liste ideelt set. Denne funktion behandler på hinanden følgende serier som en enkelt serie ved at iterere dem via den iterable, der sendes som parameter på en seriel måde.
Lad os overveje følgende eksempel:
eksempler på javascript-eksempler
Eksempel:
# 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
Produktion:
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]
Forklaring:
I ovenstående eksempel har vi importeret itertools bibliotek og genererede en indlejret liste. Vi har så brugt kæde() funktion til at konvertere den givne indlejrede liste til den fladtrykte liste. Endelig har vi returneret resultatet til brugerne. Som et resultat bliver listen over lister fladt ud.
Udjævning af listen over lister ved hjælp af NumPy-biblioteket
Det NumPy biblioteket giver forskellige daglige operationer, herunder sammenkædning af todimensionelle regulære arrays kolonnevis eller rækkevis. Vi vil bruge attributten kendt som flad for at få en One-Dimensional Iterator over arrayet for at erobre målet. Lad os overveje følgende eksempel for at forstå brugen af den sammenkædede funktion og den flade attribut.
Eksempel:
# 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)
Produktion:
The Nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] The Flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90]
Forklaring:
I ovenstående eksempel har vi importeret nusset bibliotek og definerede en indlejret liste. Vi har så brugt sammenkæde funktion af nusset bibliotek sammen med dets flad attribut for at udjævne elementerne i den indlejrede liste og sammenkæde dem til en ny sammenfladet liste. Endelig har vi printet resultatet til brugerne. Listen over lister er således fladt ud med succes.
Brug af kernefunktioner
Vi kan også udføre udfladningsopgaven ved at bruge nogle kernefunktioner, som Python-programmeringssproget giver.
Udjævning af listen over lister ved hjælp af sumfunktionen
Vi kan overveje at summere over indre lister som en anden løsning på problemet. Vi videregiver to argumenter til sum funktion: Den første parameter er iterable , som er en indlejret liste, og den anden parameter er Start som er en ugyldig liste for følgende tilfælde, der fungerer som den indledende flade liste, hvor dataelementerne i de indre underlister tilføjes.
Vi kan sige, at denne tilgang er ret praktisk, da vi ikke behøver at importere noget. Det er dog langsommere end itertools() og kæde() fungerer, når der er et stort antal underlister til stede i den indlejrede liste.
fordele og ulemper ved teknologi
Lad os overveje følgende eksempel:
Eksempel:
# 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)
Produktion:
The Nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] The Flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90]
Forklaring:
I ovenstående eksempel har vi defineret den indlejrede liste. Vi har så brugt sum() funktion og fladdede den indlejrede liste til en endimensionel liste og udskrev den resulterende liste for brugerne. Som et resultat heraf har vi omdannet listen over lister til en flad liste med succes.
Udjævning af listen over lister ved hjælp af Lambda-nøgleord
Vi kan definere en anonym funktion ved hjælp af nøgleordet lambda . Vi kan videregive den regulære/irregulære liste som parameter til denne anonyme funktion. Evalueringen af udtrykket udføres for at opnå en flad endimensionel liste.
Lad os overveje følgende eksempel:
Eksempel:
# 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))
Produktion:
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]
Forklaring:
I ovenstående eksempel har vi defineret en indlejret liste. Vi har så brugt lambda nøgleord sammen med et argument, der definerer et udtryk for listeforståelse. Vi har så printet dem til brugerne. Som et resultat har vi med succes konverteret den todimensionelle uregelmæssige liste til den fladtrykte liste.