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