logo

Maak de lijst plat in Python

Een introductie

A Lijst wordt beschouwd als een van de meest flexibele datastructuren in de programmeertaal Python. Aan de andere kant is een tweedimensionale lijst, of 2D-lijst, die over het algemeen een lijst met lijsten wordt genoemd, een object van een lijst waarbij elk element zelf een lijst is. Bijvoorbeeld: [[19, 18, 17], [16, 15, 14], [13, 12, 11]].

Het afvlakken van een lijst met lijsten is een proces waarbij een tweedimensionale lijst wordt getransformeerd in een eendimensionale lijst door elk lijstelement dat in de lijst met lijsten wordt bewaard, te ontnesten, dat wil zeggen door het transformeren van [[9, 8, 7], [6 , 5, 4], [3, 2, 1]] tot [9, 8, 7, 6, 5, 4, 3, 2, 1].

We kunnen het afvlakkingsproces uitvoeren met behulp van de geneste voor loops, recursie, lijstbegrippen, kernfuncties, of het importeren van de bibliotheken of pakketten in Python op basis van de diepte en regelmaat van de geneste lijsten.

In deze tutorial zullen we verschillende methoden uitwerken om de geneste lijsten plat te maken met behulp van de programmeertaal Python. Maar voordat we beginnen, moeten we eerst de soorten geneste lijsten begrijpen.

Wat zijn de soorten geneste lijsten?

Zoals we weten, Python is een zwak getypeerde programmeertaal. Daarom kunnen we twee soorten Lijsten tegenkomen. Deze lijst met lijsten of geneste lijsten is als volgt:

  1. Regelmatige lijst met lijsten
  2. Onregelmatige lijst met lijsten

Regelmatige lijst met lijsten

Naar elk item in de reguliere lijst met lijsten wordt verwezen als een sublijst, waarbij de uniformiteit van het type element wordt gerespecteerd. Bijvoorbeeld: [[9, 8, 7], [6, 5, 4], [3, 2, 1]] is een reguliere lijst met lijsten als [9, 8, 7], [6, 5, 4] , [3, 2, 1] is van het lijsttype.

Onregelmatige lijst met lijsten

Java instellen

Naar elk item in de onregelmatige lijst met lijsten wordt verwezen als een sublijst- of een niet-lijstelement (bijvoorbeeld een tekenreeks of een geheel getal). Er is dus sprake van een onregelmatigheid wat betreft het type element. Bijvoorbeeld: [[9, 8, 7], [6, 5], 4, 3] is een onregelmatige lijst met lijsten, aangezien [9, 8, 7] en [6, 5] van de lijsttypen zijn, terwijl 4 en 3 zijn van het int-type.

Het afvlakken van de lijst met lijsten met behulp van de geneste for-lussen

De lijst met lijsten afvlakken met de geneste voor De hulp van Loops wordt beschouwd als een brute force-aanpak om een ​​platte lijst te verkrijgen. We kunnen deze methode uitvoeren door elk item uit de tweedimensionale lijst te selecteren en het in een eendimensionale lijst te rangschikken.

Laten we eens kijken naar het volgende voorbeeld dat werkt voor zowel reguliere als onregelmatige lijsten met lijsten.

Voorbeeld:

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

Uitgang:

 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] 

Uitleg:

In het bovenstaande voorbeeld hebben we een functie gedefinieerd als flattenlijst dat een parameter inneemt als _2dlijst . Wij hebben er toen gebruik van gemaakt voor loop om de elementen van de geneste lijst te herhalen en deze toe te voegen om een ​​afgeplatte lijst te genereren. Vervolgens hebben we de geneste lijst gedefinieerd en de flattenlijst functie. Als gevolg hiervan is de geneste lijst met succes getransformeerd in de afgeplatte lijst.

Het afvlakken van de geneste lijst met behulp van een lijstbegrip

Het afvlakken van de lijst met lijsten met behulp van Lijstbegrip wordt beschouwd als een elegante benadering om een ​​platte lijst te verkrijgen, afhankelijk van een tweedimensionale bestaande lijst. Deze aanpak biedt echter een minder intuïtieve oplossing.

Laten we het volgende voorbeeld bekijken.

Voorbeeld:

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

Uitgang:

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

Uitleg:

In het bovenstaande voorbeeld hebben we een geneste lijst en lijstbegrip gedefinieerd. Wij hebben ze vervolgens voor de gebruikers afgedrukt. Als gevolg hiervan is de geneste lijst met succes omgezet in de afgeplatte lijst.

Het afvlakken van de lijst met lijsten met behulp van de recursieve methode

We kunnen ook de recursieve methode gebruiken om de tweedimensionale lijst af te vlakken. Laten we het volgende voorbeeld bekijken waarin de recursieve methode wordt geïmplementeerd om de lijst met lijsten plat te maken. Deze implementatie werkt goed voor zowel reguliere als onregelmatige lijsten.

Voorbeeld:

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

Uitgang:

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

Uitleg:

In het bovenstaande voorbeeld hebben we een functie gedefinieerd en een gebruikt als stelling geeft aan of de lengte van de geneste lijst gelijk is aan nul en retourneert vervolgens de geneste lijst.

tekenreeksformaat java

Als het data-element op de nulde index een exemplaar van een lijst is, gaat de lijstindex opnieuw naar de functie en wordt deze toegevoegd aan de volgende index van de lijst, enzovoort. Anders retourneert de functie de elementen, enzovoort. Eindelijk hebben we de geneste lijst gedefinieerd en de functie uitgevoerd. Als gevolg hiervan is de lijst met lijsten recursief afgevlakt.

Gebruik maken van bibliotheken van Python

We kunnen ook enkele van de Python-programmeertaalbibliotheken gebruiken om de lijst met lijsten plat te maken. De implementatie van deze bibliotheken wordt hieronder beschreven:

Het afvlakken van de lijst met lijsten met behulp van de functools en operatorbibliotheken

De exploitant bibliotheek biedt de iconcat() functie om de fundamentele bewerking zoals aaneenschakeling uit te voeren. We kunnen deze functie cumulatief toepassen op de gegevenselementen van een geneste lijst, van links naar rechts, wat resulteert in de reductie van de geneste lijst tot een afgeplatte lijst.

Laten we het volgende voorbeeld bekijken om de implementatie ervan te begrijpen.

Voorbeeld:

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

Uitgang:

 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] 

Uitleg:

In het bovenstaande voorbeeld hebben we de functionele hulpmiddelen bibliotheek samen met de exploitant bibliotheek. Vervolgens hebben we een lege lijst gedefinieerd als de reguliere lijst . We hebben vervolgens een functie gedefinieerd als convo om de lijst met lijsten om te zetten in een afgeplatte lijst. In deze functie hebben we de voor lus waarbij de elementen uit de geneste lijst worden toegevoegd aan de lege lijst die we eerder hebben gedefinieerd. Later hebben we de geneste lijst gedefinieerd en voeren we de functie uit. Als gevolg hiervan wordt de lijst met lijsten met succes omgezet in een afgeplatte lijst.

Het afvlakken van de lijst met lijsten met behulp van de itertools-bibliotheek

De itertools bibliotheek biedt de ketting() functie waarmee we een geneste lijst idealiter kunnen transformeren in een enkele afgeplatte lijst. Deze functie behandelt opeenvolgende reeksen als een enkele reeks door ze op seriële wijze te itereren via de iterabele die als parameter wordt doorgegeven.

Laten we het volgende voorbeeld bekijken:

willekeurig nummer c-code

Voorbeeld:

 # 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 

Uitgang:

 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] 

Uitleg:

In het bovenstaande voorbeeld hebben we de itertools bibliotheek en genereerde een geneste lijst. Wij hebben toen gebruik gemaakt van de ketting() functie om de gegeven geneste lijst naar de afgeplatte lijst te converteren. Eindelijk hebben we het resultaat teruggestuurd naar de gebruikers. Als gevolg hiervan wordt de lijst met lijsten met succes afgevlakt.

Het afvlakken van de lijst met lijsten met behulp van de NumPy-bibliotheek

De NumPy bibliotheek biedt verschillende dagelijkse bewerkingen, waaronder de aaneenschakeling van tweedimensionale reguliere arrays in kolommen of rijen. We zullen het attribuut gebruiken dat bekend staat als vlak om een ​​eendimensionale iterator over de array te krijgen om het doel te veroveren. Laten we het volgende voorbeeld bekijken om het gebruik van de aaneengeschakelde functie en het platte attribuut te begrijpen.

Voorbeeld:

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

Uitgang:

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

Uitleg:

In het bovenstaande voorbeeld hebben we de numpig bibliotheek en definieerde een geneste lijst. Wij hebben toen gebruik gemaakt van de aaneenschakelen functie van de numpig bibliotheek samen met zijn vlak attribuut om de elementen van de geneste lijst af te vlakken en ze samen te voegen tot een nieuwe afgevlakte lijst. Eindelijk hebben we het resultaat voor de gebruikers afgedrukt. De lijst met lijsten wordt dus met succes afgevlakt.

Kernfuncties gebruiken

We kunnen de afvlakkingstaak ook uitvoeren door gebruik te maken van enkele kernfuncties die de programmeertaal Python biedt.

De lijst met lijsten afvlakken met behulp van de somfunctie

We kunnen overwegen om de binnenste lijsten op te tellen als een andere oplossing voor het probleem. We geven twee argumenten door aan de som functie: De eerste parameter is itereerbaar , wat een geneste lijst is, en de tweede parameter is begin dit is een lege lijst voor het volgende geval die dient als de initiële platte lijst waaraan de gegevenselementen van de binnenste sublijsten zullen worden toegevoegd.

We kunnen zeggen dat deze aanpak behoorlijk handig is, omdat we niets hoeven te importeren. Het is echter langzamer dan de itertools() En ketting() functioneert wanneer er een groot aantal sublijsten aanwezig is in de geneste lijst.

Laten we het volgende voorbeeld bekijken:

Voorbeeld:

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

Uitgang:

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

Uitleg:

In het bovenstaande voorbeeld hebben we de geneste lijst gedefinieerd. Wij hebben toen gebruik gemaakt van de som() functie en maakte de geneste lijst plat tot een eendimensionale lijst, en drukte de resulterende lijst af voor de gebruikers. Als gevolg hiervan hebben we de lijst met lijsten met succes omgezet in een platte lijst.

De lijst met lijsten afvlakken met het Lambda-trefwoord

We kunnen een anonieme functie definiëren met behulp van het trefwoord lambda . We kunnen de reguliere/onregelmatige lijst doorgeven als parameter voor deze anonieme functie. De evaluatie van de uitdrukking wordt gedaan om een ​​vlakke eendimensionale lijst te verkrijgen.

Laten we het volgende voorbeeld bekijken:

shreya ghoshal

Voorbeeld:

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

Uitgang:

 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] 

Uitleg:

In het bovenstaande voorbeeld hebben we een geneste lijst gedefinieerd. Wij hebben toen gebruik gemaakt van de lambda trefwoord samen met een argument dat een uitdrukking voor lijstbegrip definieert. Wij hebben ze vervolgens voor de gebruikers afgedrukt. Als gevolg hiervan hebben we met succes de tweedimensionale onregelmatige lijst omgezet in de afgeplatte lijst.