En guide för att förenkla lista och lista över listor i Python

Omvandling från 2D till 1D-array i Python

Processen att omvandla en tvådimensionell array till en endimensionell array benämns utplattning. Det finns en rad olika metoder för att åstadkomma detta.

I denna genomgång kommer vi att undersöka några av dessa metoder.

Låt oss titta på ett exempel:

Indata:

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

Utdata:

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

#1. Använda Slingor

En vanlig lösning på detta problem involverar användandet av loopar. Många känner nog igen denna metod. Låt oss gå igenom stegen för hur man löser detta med loopar:

  • Först skapar vi en lista med listor som testdata och namnger den ”data”.
  • Därefter initierar vi en tom lista, som vi kallar ”flat_list”.
  • Vi itererar genom ”data”.
    • För varje lista i ”data” hämtar vi ut dess element.
    • Sedan lägger vi till dessa element i ”flat_list” med hjälp av ”append”-metoden.
  • Slutligen skriver vi ut resultatet.

Här är koden för denna process:

# Initierar data och en tom lista
data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
flat_list = []

# Itererar genom data
for item in data:
    # Lägger till element i flat_list
    flat_list += item

# Skriver ut den resulterande flat_list
print(flat_list)
  

Man kan även använda en annan typ av loop för att lägga till elementen, eller använda listomfattning istället för loopar, vilket ger samma resultat. Låt oss gå vidare till en annan metod.

#2. Använda Itertools – chain

Här ska vi använda en funktion som heter ”chain” från den inbyggda modulen ”itertools”.

”chain” itererar genom varje underlista och returnerar elementen tills inga fler underlistor finns kvar. Denna returnerar en iterabel, som vi behöver konvertera till en lista.

Här är stegen för denna metod:

  • Vi börjar med att skapa en lista med listor som testdata och ger den namnet ”data”.
  • Vi skapar en platt iterabel med itertools.chain(*data).
  • Därefter konverterar vi denna iterabel till en lista.
  • Slutligen skriver vi ut den platta listan.

Nedan följer koden för detta:

# Importerar modulen
import itertools

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

# Plattar ut listan och sparar resultatet
flat_list = itertools.chain(*data)

# Konverterar iterabeln till en lista och skriver ut
print(list(flat_list))
    

#3. Utplattning av listor med flera nivåer

Vi har nu sett hur man plattar ut en lista med listor, men dessa metoder fungerar inte för listor med flera nivåer. Låt oss se ett exempel:

Indata:

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

Utdata:

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

Eftersom vi inte känner till djupet på listorna innan programmet körs, måste vi använda rekursion för att lösa detta problem.

  • Vi börjar med att initiera data som i exemplet och namnger den ”data”.
  • Vi initierar en tom lista som vi kallar ”flat_list”.
  • Vi skapar en funktion, ”flatten_list”, som gör följande:
    • Itererar genom elementen i den givna listan.
    • Om ett element är en lista, anropar funktionen sig själv (rekursivt).
    • Om elementet inte är en lista lägger vi till det i ”flat_list”.
  • Vi anropar ”flatten_list” med data.
  • Funktionen fyller ”flat_list” med alla element.
  • Slutligen skriver vi ut ”flat_list” för att kontrollera resultatet.

Det var en del steg, men oroa dig inte, det går snabbt att omvandla detta till kod:

# Initierar data och en tom lista
data = [1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
flat_list = []

# Funktionen
def flatten_list(data):
    # Itererar genom data
    for element in data:
        # Kontrollerar om elementet är en lista
        if type(element) == list:
            # Anropar samma funktion med aktuellt element
            flatten_list(element)
        else:
            flat_list.append(element)

# Plattar ut listan
flatten_list(data)

# Skriver ut flat_list
print(flat_list)
    

Observera att vi inte modifierade den befintliga listan. Istället skapade vi en ny lista med alla element.

Slutsats

Vi hoppas att du uppskattade denna genomgång. Det finns många andra sätt att platta ut en lista i Python, men vi kände att dessa var de mest grundläggande och användbara.

Lycka till med kodningen! 🙂