Przewodnik po spłaszczaniu listy i listy list w Pythonie

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]

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