Wie man eine Liste in Python verflacht

Aliaksei Yursha 13 Juli 2021
  1. Pythonliste seichte Abflachung
  2. Python-Liste tiefe Abflachung
Wie man eine Liste in Python verflacht

Das Abflachen ist eine Operation, bei der wir eine Liste von verschachtelten Listen nehmen und in eine andere Datenstruktur konvertieren, die keine verschachtelten Listen enthält.
Stattdessen werden alle Elemente aus allen Listen, die ursprünglich geschachtelt wurden, einbezogen.
Eine solche Datenstruktur nennt man eine flache oder geglättete Liste.

Die ursprüngliche Liste kann nur in der ersten Stufe der Schachtelung geschachtelte Listen enthalten, denn
Beispiel [[1, 2], [3, 4]].
Ansonsten enthält es Listen auf der zweiten, dritten und weiteren Ebenen der Verschachtelung,
zum Beispiel [[[1], [2]], [3, 4]].
Eine solche Liste soll tief verschachtelte Listen enthalten.

Wenn wir nur eine einzige Ebene der Verschachtelung unnestalten wollen, nennen wir das einfache Abflachung.
Wenn wir alle Ebenen der Verschachtelung entblößen wollen, nennen wir es tiefe Abflachung.

Pythonliste seichte Abflachung

Ein einfacher Ansatz zum Verstehen und Visualisieren ist die Verwendung einer doppelten for Schleife.

Die erste for Schleife durchläuft verschachtelte Listen. Die zweite for-Schleife iteriert über Elemente jeder verschachtelten Liste und hängt sie nacheinander an eine flache Ergebnisliste an.

>>> flat_list = []
>>> original_list = [[1, 2], [3, 4]]
>>> for l in original_list:
...   for item in l:
...     flat_list.append(item)
...
>>> flat_list
[1, 2, 3, 4]

Die obige Methode ist klar und lesbar, aber die Ausdruckskraft von Python erlaubt
dass wir das gleiche Ziel in nur einer Linie erreichen.
Hier kommt Python’s List Comprehensions zu Hilfe.

>>> original_list = [[1, 2], [3, 4]]
>>> flat_list = [item for l in original_list for item in l]
>>> flat_list
[1, 2, 3, 4]

Wenn Sie keine flache Liste an sich benötigen, sondern über alle Elemente iterieren können wollen
aller Unterlisten, als ob sie aus einer einzigen flachen Datenstruktur kämen, können Sie itertools.chain() verwenden.

>>> import itertools
>>> original_list = [[1, 2], [3, 4]] 
>>> iterator = itertools.chain(*original_list)
>>> for item in iterator:
...   print(item)
...
1
2
3
4

Wenn Sie Pandas - ein Open-Source-Paket für die Datenanalyse in Python - verwenden, gibt es ebenfalls einen eingebauten Weg.

>>> from pandas.core.common import flatten
>>> original_list = [[1, 2], [3, 4]]  
>>> flat_list = list(flatten(original_list))
>>> flat_list
[1, 2, 3, 4]

Python-Liste tiefe Abflachung

Wie oben erwähnt, wird die flache Abflachung nicht funktionieren, wenn wir tief verschachtelte Listen haben.
Es wird nur die erste Stufe der Verschachtelung unnest, wie im Beispiel unten gezeigt.

>>> deeply_nested_list = [[[1, 2], 3], [4, 5, 6]]
>>> flat_list = [item for l in deeply_nested_list for item in l]
>>> flat_list
[[1, 2], 3, 4, 5, 6]

Um die tiefe Verflachung durchzuführen, benutzen Sie iteration_utilities.deepflatten() aus dem iteration-utilities PyPI-Paket.

Installieren Sie zuerst das PyPI-Paket selbst.

$ pip install iteration-utilities

Dann flachen Sie Ihre tief verschachtelten Listen ab.

>>> from iteration_utilities import deepflatten
>>> deeply_nested_list = [[[1, 2], 3], [4, 5, 6]]
>>> flat_list = list(deepflatten(deeply_nested_list))
>>> flat_list
[1, 2, 3, 4, 5, 6]

Verwandter Artikel - Python List