Průvodce sloučit seznam a seznam seznamů v Pythonu

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]

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

  Jak zakázat nové rozhraní Chrome

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.

  Jak obnovit možnosti uživatele a nastavení registru ve Wordu

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.

  Vytvářejte výkonné grafy, vizualizujte data a vytvářejte řídicí panely ve svých aplikacích pomocí FusionCharts

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í 🙂