Egy 2D tömb 1D tömbbé alakítását lapításnak nevezzük. Számos megközelítés létezik a probléma megoldására.
Ezek közül néhányat megvizsgálunk ebben az oktatóanyagban.
Lássunk egy példát.
Bemenet
[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
Kimenet
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#1. Hurkok
A probléma megoldásának legáltalánosabb módja a hurkok használata. Szerintem a legtöbben már megkaptad. Lássuk a probléma megoldásának lépéseit hurkok használatával.
- Inicializálja a listák listáját áladatokkal, és nevezze el adatnak.
- Most inicializáljon egy üres listát flat_list néven.
- Ismételje meg az adatokat.
- Csomagolja ki az összes elemet az aktuális listából.
- Adja hozzá őket a flat_list-hez a lista hozzáfűzési módszerrel.
- Nyomtassa ki az eredményt.
Lásd alább a probléma kódját.
# 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)
Az összefűzési operátor helyett egy másik ciklust is használhat az allista elemek hozzáadásához a flat_list listához. A ciklusok helyett használhatunk listaértelmezéseket is.
Mindkettő ugyanazt a munkát végzi. Lássuk a probléma megoldásának következő módját.
#2. Itertools – Lánc
Az itertools beépített moduljából egy lánc nevű metódust fogjuk használni.
A metóduslánc iterál minden egyes allistán, és addig adja vissza az elemeket, amíg nincs benne allista. Egy iterálhatót ad vissza, amelyet listává kell alakítanunk.
Lássuk a probléma megoldásának lépéseit.
- Inicializálja a listák listáját áladatokkal, és nevezze el adatnak.
- Szerezd meg a kiegyenlített iterálhatóságot az itertools.chain(*data) segítségével.
- Alakítsa át az eredményül kapott iterált listává.
- Nyomtassa ki a kiegyenlített listát.
Az alábbi részletben végignézheti a kódot.
# 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. Többszintű listák simítása
Láttuk, hogyan lehet laposítani a listák listáját. A fenti módszerek, amelyeket a lista egyesítésére tárgyaltunk, nem működnek többszintű listák esetén. Lássunk egy példát.
Bemenet
[1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
Kimenet
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Mivel a program előtt nem ismerjük a listák mélységét, ezért a feladat megoldásához rekurziót kell használnunk.
- Inicializálja az adatokat a példában látható módon, és nevezze el adatnak.
- Inicializálja a flat_list nevű üres listát.
- Írjon egy flatten_list nevű függvényt.
- Ismételje meg az adott lista elemeit.
- Ha az elem egy lista, akkor ismételten hívja meg ugyanazt a függvényt.
- Ha az elem nem lista, akkor fűzze hozzá az elemet a flat_list-hez.
- Hívja meg a függvényt adatokkal.
- A függvény kitölti a flat_list lista összes elemét.
- Nyomtassa ki a flat_list-ot a kimenet ellenőrzéséhez.
Fú! sok lépés a kódoláshoz. Ne aggódj. A fenti utasítások kóddá alakítása nem tart tovább percnél.
# 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)
Ne feledje, hogy nem konvertáltuk a meglévő listát. Ehelyett egy új listát hoztunk létre az adott listaelemmel.
Következtetés
Remélem tetszett az oktatóanyag. Sok más mód is lehet a lista egyesítésére Pythonban, de úgy éreztem, a fentiek a legegyszerűbbek.
Boldog kódolást 🙂