Transformasjon av en todimensjonal matrise til en endimensjonal matrise kalles ofte utflating. Det eksisterer flere tilnærmingsmåter for å løse denne problemstillingen.
I denne veiledningen vil vi utforske noen av disse metodene.
La oss illustrere med et eksempel.
Inndata:
[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
Resultat:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#1. Bruk av løkker
Den mest direkte tilnærmingen til dette problemet involverer bruken av løkker. Det antas at de fleste av dere allerede er kjent med dette konseptet. La oss se nærmere på stegene som kreves for å løse problemet ved hjelp av løkker.
- Initialiser en liste av lister med eksempeldata, og gi den navnet «data».
- Opprett en ny, tom liste som vi kaller «flat_list».
- Iterer gjennom elementene i «data».
- For hver underliste, hent ut alle elementene.
- Legg disse elementene til «flat_list» ved å bruke append-metoden.
- Vis den resulterende «flat_list».
Nedenfor finner du koden som demonstrerer løsningen.
# Initialisering av data og en tom liste data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]] flat_list = [] # Iterasjon gjennom dataene for element in data: # Legger elementene til flat_list flat_list += element # Viser den resulterende flat_list print(flat_list)
En annen løkke kan brukes for å tilføye elementer fra underlistene til «flat_list», alternativt til bruk av sammenkoblingsoperatoren. Vi kan også benytte oss av listekomprehensjon i stedet for løkker.
Begge metodene oppnår det samme resultatet. La oss utforske en annen metode for å løse dette problemet.
#2. Itertools – Kjede
Her vil vi benytte oss av en metode kalt «chain» fra den innebygde «itertools» modulen.
«Chain»-metoden itererer gjennom hver underliste og returnerer elementene inntil det ikke finnes flere underlister. Den gir oss en iterator som vi må konvertere til en liste.
Her er stegene som er involvert for å løse problemet.
- Initialiser en liste av lister med eksempeldata og gi den navnet «data».
- Skaff en flat iterator ved å bruke «itertools.chain(*data)».
- Konverter den resulterende iteratoren til en liste.
- Vis den flate listen.
Gjennomgå kodeeksemplet under.
# Importerer modulen import itertools # Initialiserer dataene data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]] # Flater ut listen og lagrer resultatet flat_list = itertools.chain(*data) # Konverterer iteratoren til liste og viser den print(list(flat_list))
#3. Utflating av lister på flere nivåer
Vi har nå sett hvordan man kan flate ut en liste av lister. De metodene vi har diskutert ovenfor vil ikke fungere for lister med flere nivåer. La oss se på et eksempel.
Inndata:
[1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
Resultat:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Siden vi ikke vet dybden på listene før programmet kjører, er rekursjon nødvendig for å løse dette problemet.
- Initialiser dataene som vist i eksemplet og gi dem navnet «data».
- Lag en tom liste kalt «flat_list».
- Lag en funksjon kalt «flatten_list».
- Iterer gjennom elementene i den gitte listen.
- Hvis et element er en liste, kall den samme funksjonen rekursivt igjen.
- Hvis et element ikke er en liste, legg elementet til «flat_list».
- Kall funksjonen med data som argument.
- Funksjonen vil fylle alle elementene i «flat_list».
- Vis «flat_list» for å sjekke resultatet.
Puh! Mange steg for å kode. Men ikke bekymre deg, det å konvertere de ovennevnte trinnene til kode tar ikke lang tid.
# Initialiserer data og tom liste data = [1, [2, 3, [4, 5]], 6, [[7], [8, 9]]] flat_list = [] # Definerer funksjonen def flatten_list(data): # Itererer gjennom dataene for element in data: # Sjekker om elementet er en liste if type(element) == list: # Kaller funksjonen rekursivt med nåværende element som nytt argument flatten_list(element) else: flat_list.append(element) # Utflater den gitte listen flatten_list(data) # Viser den flate listen print(flat_list)
Merk at vi ikke har endret den opprinnelige listen, men har i stedet generert en ny liste basert på elementene fra den gitte listen.
Konklusjon
Forhåpentligvis fant du denne veiledningen nyttig. Det kan eksistere flere alternative metoder for å flate ut en liste i Python, men de ovennevnte er ansett som de mest enkle og effektive.
Lykke til med kodingen! 🙂