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