Flat lister i Python: 3 enkle metoder

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! 🙂