Transformarea unei matrice bidimensionale într-o matrice unidimensională este un proces cunoscut sub denumirea de aplatizare. Pentru a realiza acest lucru, există diverse metodologii pe care le vom explora în detaliu în acest material.
Să parcurgem câteva exemple pentru a înțelege mai bine acest concept.
Exemplu de intrare:
[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
Exemplu de ieșire:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#1. Metode bazate pe bucle
Una dintre cele mai intuitive abordări constă în utilizarea buclelor iterative. Probabil că majoritatea dintre voi sunteți deja familiarizați cu această tehnică. Haideți să analizăm pașii necesari pentru a aplica această metodă:
- Începem prin a defini o listă de liste, pe care o vom numi „date”, populată cu valorile noastre de test.
- În continuare, inițializăm o listă goală, denumită „flat_list”, care va stoca rezultatul procesului de aplatizare.
- Parcurgem lista „date” utilizând o buclă.
- Pentru fiecare sublistă, extragem individual toate elementele.
- Adăugăm fiecare element la lista „flat_list” folosind metoda de adăugare la listă.
- La final, afișăm conținutul listei „flat_list”.
Codul de mai jos exemplifică acești pași:
# Initializare date si lista goala data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]] flat_list = [] # Iterarea prin date for item in data: # Adaugarea elementelor la flat_list flat_list += item # Afisarea listei aplatizate print(flat_list)
Alternativ, putem utiliza o altă buclă pentru a adăuga elementele din subliste la lista „flat_list”, în locul operatorului de concatenare. De asemenea, putem realiza același rezultat folosind list comprehensions, care oferă un cod mai concis, dar îndeplinește același scop. Să analizăm o altă metodă eficientă de a rezolva această problemă.
#2. Utilizarea modulului Itertools – funcția Chain
Această secțiune introduce o funcție specială, „chain”, din cadrul modulului „itertools”, un instrument puternic pentru manipularea iteratoarelor.
Funcția „chain” parcurge fiecare sublistă și returnează pe rând elementele sale, până când toate sublistele au fost procesate. Rezultatul este un iterator, care trebuie transformat într-o listă pentru a putea fi utilizat.
Iată pașii implicați în implementarea acestei metode:
- Se inițializează lista de liste cu date de test, similar ca în exemplul anterior.
- Se obține iteratorul aplatizat folosind funcția `itertools.chain(*data)`.
- Se transformă iteratorul într-o listă, folosind funcția `list()`.
- În final, se afișează lista aplatizată.
Iată fragmentul de cod corespunzător:
# Importarea modulului import itertools # Initializarea datelor data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]] # Aplatizarea listei si stocarea rezultatului flat_list = itertools.chain(*data) # Conversia iteratorului in lista si afisarea print(list(flat_list))
#3. Aplatizarea listelor cu mai multe nivele de imbricare
Am demonstrat cum să aplatizăm liste de liste. Totuși, metodele prezentate mai sus nu sunt adecvate pentru listele cu mai multe niveluri de imbricare. Să analizăm un exemplu concret:
Exemplu de intrare:
[1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
Exemplu de ieșire:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Deoarece adâncimea listelor nu este cunoscută dinainte, vom utiliza recursiunea pentru a rezolva această problemă complexă.
- Se inițializează datele conform exemplului și se denumesc „date”.
- Se definește o listă goală numită „flat_list”, care va stoca rezultatele.
- Se definește o funcție recursivă numită `flatten_list`.
- Aceasta iterează prin elementele listei primite ca argument.
- Dacă un element este o listă, funcția `flatten_list` este apelată recursiv cu acel element.
- Dacă elementul nu este o listă, acesta este adăugat la lista „flat_list”.
- Se apelează funcția `flatten_list` cu lista originală „date”.
- Funcția va completa lista „flat_list” cu toate elementele aplatizate.
- În final, se afișează lista „flat_list” pentru a verifica rezultatul.
Implementarea necesită o serie de pași, însă aceștia se traduc rapid în cod:
# Initializarea datelor si a listei goale data = [1, [2, 3, [4, 5]], 6, [[7], [8, 9]]] flat_list = [] # Definitia functiei recursive def flatten_list(data): # Iterarea prin date for element in data: # Verificarea daca elementul este o lista if type(element) == list: # Apelarea recursiva a functiei flatten_list(element) else: flat_list.append(element) # Aplatizarea listei flatten_list(data) # Afisarea listei aplatizate print(flat_list)
Este important de menționat că nu am modificat lista inițială, ci am creat o nouă listă care conține elementele aplatizate.
Concluzie
Sperăm că acest tutorial v-a fost util. Deși există mai multe metode pentru a aplatiza o listă în Python, am ales să vă prezentăm cele mai intuitive și simple abordări.
Spor la programare! 🙂