logo

Geneste lijstbegrippen in Python

Lijstbegrip is een van de meest verbazingwekkende kenmerken van Python . Het is een slimme en beknopte manier om lijsten te maken door een itereerbaar object te herhalen. Geneste lijstbegrippen zijn niets anders dan een lijstbegrip binnen een ander lijstbegrip, dat vrij gelijkaardig is aan geneste for-lussen.

Genest lijstbegrip in Python-syntaxis

Hieronder vindt u de syntaxis van genest lijst begrip :



Syntaxis: new_list = [[expressie voor item in lijst] voor item in lijst]

Parameters:

  • Uitdrukking : Expressie die wordt gebruikt om elk item in de instructie te wijzigen
  • Item: Het element in de iterabele
  • Lijst: Een itereerbaar object

Voorbeelden van geneste Python-lijsten

Hieronder staan ​​enkele voorbeelden van het begrijpen van geneste lijsten:



Voorbeeld 1: Een matrix creëren

In dit voorbeeld vergelijken we hoe we dat kunnen doen maak een matrix wanneer we het maken

Zonder lijstbegrip

In dit voorbeeld wordt een 5×5-matrix gemaakt met behulp van een geneste lusstructuur. Een buitenste lus herhaalt zich vijf keer en voegt lege sublijsten toe aan dematrix>, terwijl een binnenste lus elke sublijst vult met waarden variërend van 0 tot 4, wat resulteert in een matrix met opeenvolgende gehele waarden.



Python3




matrix>=> []> for> i>in> range>(>5>):> ># Append an empty sublist inside the list> >matrix.append([])> >for> j>in> range>(>5>):> >matrix[i].append(j)> print>(matrix)>

inorder boomtraversatie
>

>

Uitvoer

[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]>

Lijstbegrip gebruiken

Dezelfde uitvoer kan worden bereikt met behulp van genest lijstbegrip op slechts één regel. In dit voorbeeld wordt een 5×5-matrix gegenereerd met behulp van een genest lijstbegrip. Het buitenste begrip herhaalt zich vijf keer en vertegenwoordigt de rijen, terwijl het binnenste begrip elke rij vult met waarden variërend van 0 tot 4, wat resulteert in een matrix met opeenvolgende gehele waarden.

Python3




# Nested list comprehension> matrix>=> [[j>for> j>in> range>(>5>)]>for> i>in> range>(>5>)]> print>(matrix)>

>

>

Uitvoer

[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]>

Voorbeeld 2: Een geneste lijst filteren met behulp van Lijstbegrip

Hier zullen we zien hoe we een lijst kunnen filteren met en zonder gebruik te maken van lijstbegrip.

Zonder gebruik te maken van lijstbegrip

In dit voorbeeld doorkruist een geneste lus een 2D-matrix, haalt oneven getallen uit de Python-lijst binnen de lijst en voegt deze toe aan de lijstodd_numbers>. De resulterende lijst bevat alle oneven elementen uit de matrix.

Python3




matrix>=> [[>1>,>2>,>3>], [>4>,>5>,>6>], [>7>,>8>,>9>]]> odd_numbers>=> []> for> row>in> matrix:> >for> element>in> row:> >if> element>%> 2> !>=> 0>:> >odd_numbers.append(element)> print>(odd_numbers)>

map hernoemen in linux
>

>

Uitvoer

[1, 3, 5, 7, 9]>

Lijstbegrip gebruiken

In dit voorbeeld wordt een lijstbegrip gebruikt om de lijst beknopt te genererenodd_numbers>door de elementen van een 2D-matrix te doorlopen. Alleen oneven elementen zijn opgenomen in de resulterende lijst, wat een beknopt en leesbaar alternatief biedt voor de equivalente geneste lusstructuur.

Python3




matrix>=> [[>1>,>2>,>3>], [>4>,>5>,>6>], [>7>,>8>,>9>]]> odd_numbers>=> [> >element>for> row>in> matrix>for> element>in> row>if> element>%> 2> !>=> 0>]> print>(odd_numbers)>

>

>

Uitvoer

[1, 3, 5, 7, 9]>

Voorbeeld 3: Geneste sublijsten plat maken

Zonder lijstbegrip

In dit voorbeeld wordt een 2D-lijst genoemdmatrix>met variërende sublijstlengtes wordt afgevlakt met behulp van geneste lussen. De elementen uit elke sublijst worden opeenvolgend aan de lijst toegevoegdflatten_matrix>, resulterend in een afgeplatte weergave van de oorspronkelijke matrix.

Python3




# 2-D List> matrix>=> [[>1>,>2>,>3>], [>4>,>5>], [>6>,>7>,>8>,>9>]]> flatten_matrix>=> []> for> sublist>in> matrix:> >for> val>in> sublist:> >flatten_matrix.append(val)> print>(flatten_matrix)>

>

>

Uitvoer

[1, 2, 3, 4, 5, 6, 7, 8, 9]>

Met lijstbegrip

Ook dit kan worden gedaan met behulp van geneste lijstbegrip, zoals hieronder wordt weergegeven. In dit voorbeeld wordt een 2D-lijst genoemdmatrix>met variërende sublijstlengtes wordt afgevlakt met behulp van genest lijstbegrip. De uitdrukking[val for sublist in matrix for val in sublist]>genereert op beknopte wijze een afgeplatte lijst door elk element uit de sublijsten opeenvolgend op te nemen.

Python3

Java-wiskunde willekeurig




# 2-D List> matrix>=> [[>1>,>2>,>3>], [>4>,>5>], [>6>,>7>,>8>,>9>]]> # Nested List Comprehension to flatten a given 2-D matrix> flatten_matrix>=> [val>for> sublist>in> matrix>for> val>in> sublist]> print>(flatten_matrix)>

>

rend kaart

>

Uitvoer

[1, 2, 3, 4, 5, 6, 7, 8, 9]>

Voorbeeld 4: Tekenreeks manipuleren met behulp van lijstbegrip

Zonder lijstbegrip

In dit voorbeeld wordt een 2D-lijst genoemdmatrix>met tekenreeksen wordt gewijzigd met behulp van genest lussen . De binnenste lus geeft de eerste letter van elke vrucht een hoofdletter, en de buitenste lus construeert een nieuwe 2D-lijst,modified_matrix>, met de vruchten met een hoofdletter, resulterend in een matrix van strings met beginhoofdletters.

Python3




matrix>=> [[>'apple'>,>'banana'>,>'cherry'>],> >[>'date'>,>'fig'>,>'grape'>],> >[>'kiwi'>,>'lemon'>,>'mango'>]]> modified_matrix>=> []> for> row>in> matrix:> >modified_row>=> []> >for> fruit>in> row:> >modified_row.append(fruit.capitalize())> >modified_matrix.append(modified_row)> print>(modified_matrix)>

>

>

Uitvoer

[['Apple', 'Banana', 'Cherry'], ['Date', 'Fig', 'Grape'], ['Kiwi', 'Lemon', 'Mango']]>

Met lijstbegrip

In dit voorbeeld wordt een 2D-lijst genoemdmatrix>die tekenreeksen bevat, wordt getransformeerd met behulp van genest lijstbegrip. De uitdrukking[[fruit.capitalize() for fruit in row] for row in matrix]>genereert op efficiënte wijze een aangepaste matrix waarin de eerste letter van elke vrucht met een hoofdletter wordt geschreven, wat resulteert in een nieuwe matrix van strings met beginhoofdletters.

Python3




matrix>=> [[>'apple'>,>'banana'>,>'cherry'>],> >[>'date'>,>'fig'>,>'grape'>],> >[>'kiwi'>,>'lemon'>,>'mango'>]]> modified_matrix>=> [[fruit.capitalize()>for> fruit>in> row]>for> row>in> matrix]> print>(modified_matrix)>

>

>

Uitvoer

[['Apple', 'Banana', 'Cherry'], ['Date', 'Fig', 'Grape'], ['Kiwi', 'Lemon', 'Mango']]>