Konwersja tablicy 2D na tablicę 1D nazywana jest spłaszczaniem. Istnieje wiele podejść do rozwiązania problemu.
W tym samouczku omówimy niektóre z nich.
Zobaczmy przykład.
Wejście
[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
Wyjście
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Spis treści:
# 1. Pętle
Najczęstszym sposobem rozwiązania problemu jest użycie pętli. Myślę, że większość z Was już to ma. Zobaczmy, jak rozwiązać problem za pomocą pętli.
- Zainicjuj listę list z fikcyjnymi danymi i nazwij ją jako dane.
- Teraz zainicjuj pustą listę o nazwie flat_list.
- Iteruj po danych.
- Rozpakuj wszystkie elementy z bieżącej listy.
- Dodaj je do flat_list za pomocą metody list append.
- Wydrukuj wynik.
Zobacz kod problemu poniżej.
# 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)
Możesz użyć innej pętli, aby dodać elementy listy podrzędnej do flat_list zamiast operatora konkatenacji. Zamiast pętli możemy również użyć wyrażeń listowych.
Oba wykonują tę samą pracę. Zobaczmy następny sposób rozwiązania problemu.
#2. Itertools – Łańcuch
Wykorzystamy metodę o nazwie chain z wbudowanego modułu itertools.
Łańcuch metod iteruje po każdej liście podrzędnej i zwraca elementy, dopóki nie będzie w niej żadnych list podrzędnych. Zwraca iterowalność, którą musimy przekonwertować na listę.
Zobaczmy kroki związane z rozwiązaniem problemu.
- Zainicjuj listę list z fikcyjnymi danymi i nazwij ją jako dane.
- Uzyskaj spłaszczenie iterowalne za pomocą itertools.chain(*data).
- Przekształć wynikową iterowalność w listę.
- Wydrukuj spłaszczoną listę.
Możesz przejść przez kod w poniższym fragmencie.
# 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. Spłaszcz listy wielopoziomowe
Widzieliśmy, jak spłaszczyć listę list. Powyższe metody spłaszczania listy, które omówiliśmy, nie będą działać w przypadku list wielopoziomowych. Zobaczmy przykład.
Wejście
[1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
Wyjście
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Ponieważ nie znamy głębokości list przed programem, musimy użyć rekurencji, aby rozwiązać problem.
- Zainicjuj dane, jak pokazano w przykładzie, i nazwij je jako dane.
- Zainicjuj pustą listę o nazwie flat_list.
- Napisz funkcję o nazwie flatten_list.
- Iteruj po elementach podanej listy.
- Jeśli elementem jest lista, ponownie wywołaj rekurencyjnie tę samą funkcję.
- Jeśli element nie jest listą, dołącz element do flat_list.
- Wywołaj funkcję z danymi.
- Funkcja wypełni wszystkie elementy na liście flat_list.
- Wydrukuj flat_list, aby sprawdzić wynik.
Uff! wiele kroków do kodu. Nie martw się. Przekształcenie powyższych instrukcji w kod nie zajmie więcej niż kilka 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)
Pamiętaj, że nie przekonwertowaliśmy istniejącej listy. Zamiast tego utworzyliśmy nową listę z podanym elementem listy.
Wniosek
Mam nadzieję, że podobał Ci się samouczek. Może istnieć wiele innych sposobów spłaszczania listy w Pythonie, ale czułem, że powyższe są prawdopodobnie najłatwiejsze.
Miłego kodowania 🙂