Una guida per appiattire l’elenco e l’elenco degli elenchi in Python

La conversione di un array 2D in un array 1D si chiama appiattimento. Ci sono molti approcci per risolvere il problema.

Ne esploreremo alcuni in questo tutorial.

Vediamo un esempio.

Ingresso

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

Produzione

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

#1. Loop

Il modo più comune per risolvere il problema è utilizzare i loop. Penso che la maggior parte di voi l’abbia già capito. Vediamo i passaggi per risolvere il problema utilizzando i loop.

  • Inizializza l’elenco di elenchi con dati fittizi e denominalo come dati.
  • Ora, inizializza una lista vuota chiamata flat_list.
  • Iterare sui dati.
    • Decomprimi tutti gli elementi dall’elenco corrente.
    • Aggiungili a flat_list usando il metodo list append.
  • Stampa il risultato.

Vedere il codice per il problema di seguito.

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

È possibile utilizzare un altro ciclo per aggiungere elementi di sottoelenco a flat_list invece di un operatore di concatenazione. Possiamo anche usare list comprehensions invece di loop.

Entrambi fanno lo stesso lavoro. Vediamo il prossimo modo per risolvere il problema.

#2. Itertools – Catena

Useremo un metodo chiamato chain dal modulo integrato di itertools.

La catena di metodi itera su ogni sottoelenco e restituisce gli elementi fino a quando non ci sono più sottoelenchi. Restituisce un iterabile che dobbiamo convertire in una lista.

Vediamo i passaggi necessari per risolvere il problema.

  • Inizializza l’elenco di elenchi con dati fittizi e denominalo come dati.
  • Ottieni l’iterabile flatten usando itertools.chain(*data).
  • Converti l’iterabile risultante in una lista.
  • Stampa l’elenco appiattito.

Puoi passare attraverso il codice nello snippet sottostante.

# 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. Appiattisci elenchi multilivello

Abbiamo visto come appiattire una lista di liste. I metodi precedenti che abbiamo discusso per appiattire l’elenco non funzioneranno per elenchi multilivello. Vediamo un esempio.

Ingresso

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

Produzione

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

Poiché non conosciamo la profondità delle liste prima del programma, dobbiamo usare la ricorsione per risolvere il problema.

  • Inizializzare i dati come mostrato nell’esempio e denominarli come dati.
  • Inizializza una lista vuota chiamata flat_list.
  • Scrivi una funzione chiamata flatten_list.
    • Iterare sugli elementi dell’elenco dato.
    • Se l’elemento è un elenco, chiama di nuovo in modo ricorsivo la stessa funzione.
    • Se l’elemento non è un elenco, aggiungi l’elemento a flat_list.
  • Richiamare la funzione con i dati.
  • La funzione riempirà tutti gli elementi nell’elenco flat_list.
  • Stampa il flat_list per controllare l’output.

Uff! molti passaggi per codificare. Non preoccuparti. La conversione delle istruzioni precedenti in codice non richiederà più di minuti.

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

Ricorda, non abbiamo convertito l’elenco esistente. Invece, abbiamo creato un nuovo elenco con l’elemento elenco specificato.

Conclusione

Spero ti sia piaciuto il tutorial. Potrebbero esserci molti altri modi per appiattire un elenco in Python, ma ho sentito che quelli sopra sono probabilmente i più semplici.

Buon codice 🙂