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

Att konvertera en 2D-array till en 1D-array kallas för plattning. Det finns många sätt att lösa problemet.

Vi kommer att utforska några av dem i den här handledningen.

Låt oss se ett exempel.

Inmatning

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

Produktion

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

#1. Slingor

Det vanligaste sättet att lösa problemet är att använda loopar. Jag tror att de flesta av er redan har fattat det. Låt oss se stegen för att lösa problemet med loopar.

  • Initiera listan med listor med dummydata och namnge den som data.
  • Initiera nu en tom lista som heter flat_list.
  • Iterera över data.
    • Packa upp alla element från den aktuella listan.
    • Lägg till dem i flat_list med metoden list append.
  • Skriv ut resultatet.

Se koden för problemet nedan.

# 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 använda en annan slinga för att lägga till underlistelement till flat_list istället för en sammanlänkningsoperator. Vi kan också använda listförståelser istället för loopar.

Båda gör samma arbete. Låt oss se nästa sätt att lösa problemet.

#2. Itertools – Kedja

Vi kommer att använda en metod som kallas kedja från itertools inbyggda modul.

Metodkedjan itererar över varje underlista och returnerar elementen tills det inte finns några underlistor i den. Det returnerar en iterabel som vi måste konvertera den till en lista.

Låt oss se stegen för att lösa problemet.

  • Initiera listan med listor med dummydata och namnge den som data.
  • Skaffa plattan iterable med itertools.chain(*data).
  • Konvertera den resulterande iterable till en lista.
  • Skriv ut den platta listan.

Du kan gå igenom koden i utdraget nedan.

# 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. Platta ut flernivålistor

Vi har sett hur man plattar ut en lista med listor. Ovanstående metoder som vi har diskuterat för att platta till listan fungerar inte för listor på flera nivåer. Låt oss se ett exempel.

Inmatning

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

Produktion

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

Eftersom vi inte vet djupet på listorna innan programmet måste vi använda rekursion för att lösa problemet.

  • Initiera data som visas i exemplet och namnge dem som data.
  • Initiera en tom lista som heter flat_list.
  • Skriv en funktion som heter flatten_list.
    • Iterera över elementen i den givna listan.
    • Om elementet är en lista, anropa samma funktion rekursivt igen.
    • Om elementet inte är en lista, lägg till elementet till flat_list.
  • Anropa funktionen med data.
  • Funktionen kommer att fylla alla element i flat_list-listan.
  • Skriv ut flat_list för att kontrollera resultatet.

Puh! många steg för att koda. Oroa dig inte. Att konvertera ovanstående påståenden till kod tar inte mer än minuter.

# 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)

Kom ihåg att vi inte konverterade den befintliga listan. Istället har vi skapat en ny lista med det givna listelementet.

Slutsats

Hoppas du gillade handledningen. Det kan finnas många andra sätt att platta till en lista i Python men jag kände att ovanstående förmodligen är de enklaste.

Glad kodning 🙂