Przewodnik po spłaszczaniu listy i listy list w Pythonie

Przekształcenie tablicy dwuwymiarowej w jednowymiarową, proces znany jako spłaszczanie, to operacja, którą można zrealizować na wiele różnych sposobów.

W tym poradniku przyjrzymy się kilku z nich, aby zilustrować różnorodność podejść.

Zacznijmy od przykładu, który posłuży jako punkt odniesienia.

Dane wejściowe:

[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]

Oczekiwany rezultat:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Sposób 1: Iteracja za pomocą pętli

Najbardziej intuicyjnym rozwiązaniem jest zastosowanie pętli. Większość programistów z pewnością miała już z tym styczność. Prześledźmy krok po kroku, jak zrealizować spłaszczenie tablicy 2D z użyciem pętli.

  • Na początek, definiujemy tablicę dwuwymiarową z przykładowymi danymi i przypisujemy ją do zmiennej „dane”.
  • Następnie, inicjalizujemy pustą listę, którą nazwiemy „spłaszczona_lista”.
  • Kolejno, przechodzimy iteracyjnie przez elementy „danych”.
    • Dla każdej z podlist, wydobywamy wszystkie jej elementy.
    • Dodajemy te elementy do „spłaszczona_lista” korzystając z metody append.
  • Na końcu, wyświetlamy zawartość „spłaszczona_lista”.

Poniżej prezentujemy kod, który realizuje opisane kroki.

# inicjalizacja danych oraz pustej listy
dane = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
spłaszczona_lista = []

# iteracja po danych
for element in dane:
    # dodawanie elementów do spłaszczonej listy
    spłaszczona_lista += element

# wyświetlenie spłaszczonej listy
print(spłaszczona_lista)

Zamiast operatora konkatenacji, można również wykorzystać inną pętlę, aby dodać elementy podrzędnej listy do „spłaszczona_lista”. Dodatkowo, możemy także użyć wyrażeń listowych. Oba sposoby osiągają ten sam rezultat. Przejdźmy do kolejnej metody.

Sposób 2: Wykorzystanie `itertools.chain`

W tym podejściu posłużymy się funkcją `chain` dostępną w module `itertools`.

Funkcja `chain` przetwarza kolejne podlisty i zwraca ich elementy, dopóki nie zostaną wyczerpane. Zwraca obiekt iterowalny, który musimy na koniec przekształcić w listę.

Oto kroki postępowania:

  • Definiujemy tablicę dwuwymiarową z przykładowymi danymi i nazywamy ją „dane”.
  • Używamy `itertools.chain(*dane)`, aby uzyskać spłaszczony obiekt iterowalny.
  • Przekształcamy wynikowy iterowalny obiekt w listę.
  • Wyświetlamy spłaszczoną listę.

Kod demonstracyjny znajduje się poniżej.

# import modułu
import itertools

# inicjalizacja danych
dane = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]

# spłaszczanie listy i zapisanie rezultatu
spłaszczona_lista = itertools.chain(*dane)

# konwersja iterowalnego obiektu w listę i wyświetlenie
print(list(spłaszczona_lista))

Sposób 3: Spłaszczanie list wielopoziomowych

Do tej pory omawialiśmy spłaszczanie zwykłych list list. Jednak powyższe metody nie sprawdzą się w przypadku list wielopoziomowych. Poniżej znajduje się przykład:

Wejście:

[1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]

Oczekiwane wyjście:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

W tym przypadku, gdy nie znamy głębokości list z góry, konieczne jest użycie rekurencji.

  • Inicjalizujemy dane wejściowe zgodnie z powyższym przykładem i nazywamy je „dane”.
  • Tworzymy pustą listę o nazwie „spłaszczona_lista”.
  • Definiujemy funkcję o nazwie „spłaszcz_liste”, która działa w następujący sposób:
    • Iterujemy po elementach przekazanej listy.
    • Jeśli dany element jest listą, rekurencyjnie wywołujemy funkcję z tym elementem.
    • Jeśli element nie jest listą, dodajemy go do „spłaszczona_lista”.
  • Wywołujemy funkcję z „danymi”.
  • Funkcja ta wypełni „spłaszczona_lista” wszystkimi elementami.
  • Wyświetlamy zawartość „spłaszczona_lista”.

Tak, kroków jest sporo, ale bez obaw, implementacja tego w kodzie nie zajmie dużo czasu.

# inicjalizacja danych i pustej listy
dane = [1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
spłaszczona_lista = []

# definicja funkcji
def spłaszcz_liste(dane):
    # iteracja po danych
    for element in dane:
        # sprawdzanie typu
        if type(element) == list:
            # rekurencyjne wywołanie funkcji z bieżącym elementem
            spłaszcz_liste(element)
        else:
            spłaszczona_lista.append(element)

# spłaszczenie listy
spłaszcz_liste(dane)

# wyświetlenie spłaszczonej listy
print(spłaszczona_lista)

Należy pamiętać, że w tym przypadku nie modyfikujemy oryginalnej listy, a tworzymy zupełnie nową z elementami spłaszczonej tablicy.

Podsumowanie

Mam nadzieję, że ten poradnik był dla Ciebie pomocny. Istnieje wiele sposobów na spłaszczanie list w Pythonie, ale te zaprezentowane tutaj należą do najłatwiejszych i najbardziej zrozumiałych.

Miłego kodowania! 🙂


newsblog.pl