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]
Cuprins
#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ă.
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.
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ă 🙂