En guide for å flate ut liste og liste over lister i Python

Konvertering av en 2D-matrise til en 1D-matrise kalles flatting. Det er mange måter å løse problemet på.

Vi vil utforske noen av dem i denne opplæringen.

La oss se et eksempel.

Inndata

[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]

Produksjon

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

#1. Løkker

Den vanligste måten å løse problemet på er å bruke løkker. Jeg tror de fleste av dere allerede har skjønt det. La oss se trinnene for å løse problemet ved hjelp av loops.

  • Initialiser listen over lister med dummydata og navngi den som data.
  • Initialiser nå en tom liste kalt flat_list.
  • Iterer over dataene.
    • Pakk ut alle elementene fra gjeldende liste.
    • Legg dem til flat_list ved å bruke listen append-metoden.
  • Skriv ut resultatet.

Se koden for problemet nedenfor.

# initializing the data and an empty list
data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
flat_list = []

# iterating over the data
for item in data:
    # appending elements to the flat_list
    flat_list += item

# printing the resultantn flat_list
print(flat_list)

Du kan bruke en annen sløyfe for å legge til underlisteelementer til flat_list i stedet for en sammenkoblingsoperator. Vi kan også bruke listeforståelser i stedet for løkker.

  Hvordan bygge et API med Firebase?

Begge gjør det samme arbeidet. La oss se den neste måten å løse problemet på.

#2. Itertools – Kjede

Vi vil bruke en metode kalt kjede fra itertools innebygde modul.

Metodekjeden itererer over hver underliste og returnerer elementene til det ikke er noen underlister i den. Den returnerer en iterabel som vi må konvertere den til en liste.

La oss se trinnene som er involvert i å løse problemet.

  • Initialiser listen over lister med dummydata og navngi den som data.
  • Få den flate iterable ved å bruke itertools.chain(*data).
  • Konverter den resulterende iterable til en liste.
  • Skriv ut den flate listen.
  Hvordan lage NFT gratis uten gassavgift

Du kan gå gjennom koden i utdraget nedenfor.

# importing the module
import itertools

# initializing the data
data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]

# flattening the list and storing the result
flat_list = itertools.chain(*data)

# converting iterable to list and printing
print(list(flat_list))

#3. Flat lister på flere nivåer

Vi har sett hvordan du kan flate ut en liste med lister. Metodene ovenfor som vi har diskutert for å flate ut listen, vil ikke fungere for lister med flere nivåer. La oss se et eksempel.

Inndata

[1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]

Produksjon

[1, 2, 3, 4, 5, 6, 7, 8, 9]

Siden vi ikke kjenner dybden på listene før programmet, må vi bruke rekursjon for å løse problemet.

  • Initialiser dataene som vist i eksemplet og navngi dem som data.
  • Initialiser en tom liste kalt flat_list.
  • Skriv en funksjon kalt flatten_list.
    • Iterer over elementene i den gitte listen.
    • Hvis elementet er en liste, kall den samme funksjonen rekursivt igjen.
    • Hvis elementet ikke er en liste, legger du elementet til flat_list.
  • Aktiver funksjonen med data.
  • Funksjonen vil fylle alle elementene i flat_list-listen.
  • Skriv ut flat_list for å sjekke utdataene.
  Slik låser du opp Chime-kontoen

Puh! mange trinn for å kode. Ikke bekymre deg. Konvertering av setningene ovenfor til kode vil ikke ta mer enn minutter.

# initializing the data and empty list
data = [1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
flat_list = []

# function
def flatten_list(data):
    # iterating over the data
    for element in data:
        # checking for list
        if type(element) == list:
            # calling the same function with current element as new argument
            flatten_list(element)
        else:
            flat_list.append(element)

# flattening the given list
flatten_list(data)

# printing the flat_list
print(flat_list)

Husk at vi ikke konverterte den eksisterende listen. I stedet har vi laget en ny liste med det gitte listeelementet.

Konklusjon

Håper du likte veiledningen. Det kan være mange andre måter å flate ut en liste i Python, men jeg følte at ovennevnte sannsynligvis er de enkleste.

Lykke til med koding 🙂