Een lijst afvlakken in Python

  1. Python lijst ondiepe afvlakking
  2. Python lijst diepe afvlakking

Afvlakking is een bewerking waarbij we een lijst met geneste lijsten nemen en deze omzetten in een andere gegevensstructuur die geen geneste lijsten bevat. In plaats daarvan bevat het alle elementen uit alle lijsten, die aanvankelijk waren genest. Een dergelijke gegevensstructuur wordt een platte of een afgeplatte lijst genoemd.

De originele lijst kan bijvoorbeeld alleen geneste lijsten op het eerste niveau van genestheid bevatten [[1, 2], [3, 4]] . Anders bevat het bijvoorbeeld lijsten op het tweede, derde en verdere niveau van nesten [[[1], [2]], [3, 4]] . Een dergelijke lijst zou diep geneste lijsten bevatten.

Als we slechts een enkel niveau van genestheid onnestig willen maken, noemen we het ondiepe afvlakking. Als we alle niveaus van genestheid onnestig willen maken, noemen we het diepe afvlakking.

Python lijst ondiepe afvlakking

Een eenvoudige benadering om te begrijpen en te visualiseren is om een ​​dubbele for lus te gebruiken.

De eerste for lus doorloopt geneste lijsten. De tweede for lus herhaalt elementen van elke geneste lijst en voegt deze één voor één toe aan een platte lijst met resultaten.

>>> 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]

De bovenstaande methode is duidelijk en leesbaar, maar de expressiviteit van Python stelt ons in staat hetzelfde doel in slechts één regel te bereiken. Hier Python’s Lijstcomprehensies komen om te helpen.

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

Als u niet per se een platte lijst nodig hebt, maar alle elementen van alle sublijsten wilt herhalen alsof ze uit een enkele platte gegevensstructuur komen, kan je gebruiken itertools.chain().

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

Als u Pandas’s gebruikt - een open-sourcepakket voor gegevensanalyse in Python - is er ook een ingebouwde manier.

>>> 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 lijst diepe afvlakking

Zoals hierboven vermeld, werkt ondiepe afvlakking niet als we diep geneste lijsten hebben. Het zal unnest alleen het eerste niveau van nestedness, zoals getoond in onderstaand voorbeeld.

>>> 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]

Om de diepe afvlakking, gebruik maken iteration_utilities.deepflatten() van de iteratie-utilities PyPI pakket.

Installeer eerst het PyPI-pakket zelf.

$ pip install iteration-utilities

Maak vervolgens je diep geneste lijsten plat.

>>> 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]

Gerelateerde Artikelen - Python List

  • Wat is het verschil tussen lijstmethoden toevoegen en uitbreiden
  • Een lijst converteren naar tekenreeks in Python
  • Hoe twee of meerdere lijsten in Python samen te voegen
  • Wat is het verschil tussen del, verwijder en pop op Python-lijsten