03/29/2024

Un ghid pentru aplatizarea listelor și listelor în Python

Convertirea unei matrice 2D într-o matrice 1D se numește aplatizare. Există multe abordări pentru a rezolva problema.

Vom explora unele dintre ele în acest tutorial.

Să vedem un exemplu.

Intrare

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

Ieșire

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

#1. Bucle

Cea mai comună modalitate de a rezolva problema este utilizarea buclelor. Cred că cei mai mulți dintre voi l-ați înțeles deja. Să vedem pașii pentru a rezolva problema folosind bucle.

  • Inițializați lista de liste cu date fictive și denumiți-o ca date.
  • Acum, inițializați o listă goală numită flat_list.
  • Iterați peste date.
    • Despachetați toate elementele din lista curentă.
    • Adăugați-le la flat_list folosind metoda list append.
  • Imprimați rezultatul.

Consultați codul pentru problema de mai jos.

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

Puteți folosi o altă buclă pentru a adăuga elemente de sub-listă la flat_list în loc de un operator de concatenare. Putem folosi, de asemenea, liste de înțelegere în loc de bucle.

Amândoi fac aceeași muncă. Să vedem următoarea modalitate de a rezolva problema.

#2. Itertools – Lant

Vom folosi o metodă numită chain din modulul încorporat itertools.

Lanțul de metode iterează peste fiecare sub-listă și returnează elementele până când nu există sub-liste în ea. Returnează un iterabil pe care trebuie să-l convertim într-o listă.

  Setați luminozitatea ecranului iPhone cu mult mai mică decât ceea ce permite Apple

Să vedem pașii implicați în rezolvarea problemei.

  • Inițializați lista de liste cu date fictive și denumiți-o ca date.
  • Obțineți iterabilul aplatizat folosind itertools.chain(*data).
  • Transformați iterabilul rezultat într-o listă.
  • Tipăriți lista aplatizată.

Puteți parcurge codul în fragmentul de mai jos.

# 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. Aplatizați listele cu mai multe niveluri

Am văzut cum să aplatizam o listă de liste. Metodele de mai sus pe care le-am discutat pentru a aplatiza lista nu vor funcționa pentru listele cu mai multe niveluri. Să vedem un exemplu.

Intrare

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

Ieșire

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

Deoarece nu cunoaștem profunzimea listelor înainte de program, trebuie să folosim recursiunea pentru a rezolva problema.

  • Inițializați datele așa cum se arată în exemplu și denumiți-le ca date.
  • Inițializați o listă goală numită flat_list.
  • Scrieți o funcție numită flatten_list.
    • Iterați peste elementele listei date.
    • Dacă elementul este o listă, apelați recursiv aceeași funcție din nou.
    • Dacă elementul nu este o listă, atunci adăugați elementul la flat_list.
  • Invocați funcția cu date.
  • Funcția va umple toate elementele din lista flat_list.
  • Tipăriți flat_list pentru a verifica rezultatul.

Pf! o mulțime de pași pentru a codifica. Nu vă faceți griji. Convertirea declarațiilor de mai sus în cod nu va dura mai mult de minute.

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

Rețineți că nu am convertit lista existentă. În schimb, am creat o nouă listă cu elementul de listă dat.

  Cum să aveți grijă de bateria de laptop care nu poate fi detașată

Concluzie

Sper că v-a plăcut tutorialul. Ar putea exista multe alte moduri de a aplatiza o listă în Python, dar am simțit că cele de mai sus sunt probabil cele mai simple.

Codare fericită 🙂