Převod 2D pole na 1D pole se nazývá zploštění. Existuje mnoho přístupů k řešení problému.
Některé z nich prozkoumáme v tomto tutoriálu.
Podívejme se na příklad.
Vstup
[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
Výstup
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Table of Contents
#1. Smyčky
Nejběžnějším způsobem řešení problému je použití smyček. Myslím, že většina z vás už to pochopila. Podívejme se na kroky k vyřešení problému pomocí smyček.
- Inicializujte seznam seznamů fiktivními daty a pojmenujte je jako data.
- Nyní inicializujte prázdný seznam s názvem flat_list.
- Opakujte data.
- Rozbalte všechny prvky z aktuálního seznamu.
- Přidejte je do flat_list pomocí metody list append.
- Vytiskněte výsledek.
Podívejte se na kód problému níže.
# 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)
K přidání prvků podseznamu do flat_list můžete místo operátoru zřetězení použít jinou smyčku. Místo smyček můžeme také použít porozumění seznamu.
Oba dělají stejnou práci. Podívejme se na další způsob řešení problému.
#2. Itertools – Řetěz
Použijeme metodu nazvanou chain z vestavěného modulu itertools.
Řetězec metod iteruje přes každý podseznam a vrací prvky, dokud v něm nejsou žádné podseznamy. Vrací iterovatelnou, kterou musíme převést na seznam.
Podívejme se na kroky při řešení problému.
- Inicializujte seznam seznamů fiktivními daty a pojmenujte je jako data.
- Získejte iterovatelný flatten pomocí itertools.chain(*data).
- Převeďte výslednou iterovatelnou do seznamu.
- Vytiskněte srovnávací seznam.
Můžete si projít kód v níže uvedeném úryvku.
# 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. Vyrovnat víceúrovňové seznamy
Viděli jsme, jak zploštit seznam seznamů. Výše uvedené metody, které jsme probrali pro sloučení seznamu, nebudou fungovat pro víceúrovňové seznamy. Podívejme se na příklad.
Vstup
[1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
Výstup
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Protože neznáme hloubku seznamů před programem, musíme k vyřešení problému použít rekurzi.
- Inicializujte data podle příkladu a pojmenujte je jako data.
- Inicializujte prázdný seznam s názvem flat_list.
- Napište funkci s názvem flatten_list.
- Iterujte prvky daného seznamu.
- Pokud je prvkem seznam, pak rekurzivně zavolejte stejnou funkci znovu.
- Pokud prvek není seznam, přidejte prvek do flat_list.
- Vyvolejte funkci s daty.
- Funkce vyplní všechny prvky v seznamu flat_list.
- Vytiskněte flat_list a zkontrolujte výstup.
Fuj! mnoho kroků ke kódování. Nebojte se. Převod výše uvedených příkazů na kód nebude trvat déle než minut.
# 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)
Nezapomeňte, že jsme nepřevedli existující seznam. Místo toho jsme vytvořili nový seznam s daným prvkem seznamu.
Závěr
Doufám, že se vám výukový program líbil. V Pythonu může být mnoho dalších způsobů, jak seznam zploštit, ale cítil jsem, že výše uvedené jsou pravděpodobně ty nejjednodušší.
Veselé kódování 🙂