Saraksta izpratne ir viena no pārsteidzošākajām funkcijām Python . Tas ir gudrs un kodolīgs veids, kā izveidot sarakstus, atkārtojot atkārtojamu objektu. Ligzdotā saraksta izpratne nav nekas cits kā saraksta izpratne citā saraksta izpratnē, kas ir diezgan līdzīga ligzdotajām cilpām.
Ligzdoto sarakstu izpratne Python sintaksē
Tālāk ir norādīta ligzdotas sintakse saraksta izpratne :
Sintakse: new_list = [[izteiksme vienumam sarakstā] vienumam sarakstā]
Parametri:
- Izteiksme : izteiksme, kas tiek izmantota, lai modificētu katru priekšraksta vienumu
- Lieta: Elements iterējamā
- Saraksts: Atkārtojams objekts
Python ligzdoto sarakstu izpratnes piemēri
Tālāk ir sniegti daži ligzdotu sarakstu izpratnes piemēri.
1. piemērs: Matricas izveide
Šajā piemērā mēs salīdzināsim, kā mēs varam izveidot matricu kad mēs to veidojam ar
Bez saraksta izpratnes
Šajā piemērā 5 × 5 matrica tiek izveidota, izmantojot ligzdotas cilpas struktūru. Ārējā cilpa atkārtojas piecas reizes, pievienojot tukšus apakšsarakstusmatrix>
, savukārt iekšējā cilpa aizpilda katru apakšsarakstu ar vērtībām no 0 līdz 4, kā rezultātā tiek iegūta matrica ar secīgām veselu skaitļu vērtībām.
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)> |
>
>Izvade
[[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]]>
Saraksta izpratnes izmantošana
To pašu rezultātu var sasniegt, izmantojot ligzdotā saraksta izpratni tikai vienā rindā. Šajā piemērā 5 × 5 matrica tiek ģenerēta, izmantojot ligzdotu saraksta izpratni. Ārējā izpratne atkārtojas piecas reizes, attēlojot rindas, savukārt iekšējā izpratne aizpilda katru rindu ar vērtībām no 0 līdz 4, kā rezultātā tiek iegūta matrica ar secīgām veselu skaitļu vērtībām.
Python3
# Nested list comprehension> matrix> => [[j> for> j> in> range> (> 5> )]> for> i> in> range> (> 5> )]> print> (matrix)> |
>
>Izvade
[[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]]>
2. piemērs. Ligzdota saraksta filtrēšana, izmantojot saraksta izpratni
Šeit mēs redzēsim, kā mēs varam filtrēt sarakstu ar un neizmantojot saraksta izpratni.
Neizmantojot saraksta izpratni
Šajā piemērā ligzdotā cilpa šķērso 2D matricu, sarakstā izvelkot nepāra skaitļus no Python saraksta un pievienojot tos sarakstam.odd_numbers>
. Iegūtais saraksts satur visus nepāra elementus no matricas.
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)> |
>
>Izvade
[1, 3, 5, 7, 9]>
Saraksta izpratnes izmantošana
int uz virkni konvertēšanu java
Šajā piemērā saraksta izpratne tiek izmantota, lai īsi ģenerētu sarakstuodd_numbers>
atkārtojot 2D matricas elementus. Iegūtajā sarakstā ir iekļauti tikai nepāra elementi, nodrošinot kodolīgu un lasāmu alternatīvu līdzvērtīgai ligzdotās cilpas struktūrai.
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)> |
>
>Izvade
mit pilnā formā
[1, 3, 5, 7, 9]>
3. piemērs: Ligzdoto apakšsarakstu saplacināšana
Bez saraksta izpratnes
Šajā piemērā 2D saraksts ar nosaukumumatrix>
ar dažāda garuma apakšsarakstu tiek saplacināts, izmantojot ligzdotas cilpas. Elementi no katra apakšsaraksta tiek secīgi pievienoti sarakstamflatten_matrix>
, kā rezultātā tiek iegūts saplacināts sākotnējās matricas attēlojums.
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)> |
>
>Izvade
[1, 2, 3, 4, 5, 6, 7, 8, 9]>
Ar saraksta izpratni
Atkal to var izdarīt, izmantojot ligzdoto sarakstu izpratni, kas parādīta zemāk. Šajā piemērā 2D saraksts ar nosaukumumatrix>
ar dažāda garuma apakšsarakstu tiek saplacināts, izmantojot ligzdotu saraksta izpratni. Izteiciens[val for sublist in matrix for val in sublist]>
īsi ģenerē saplacinātu sarakstu, secīgi iekļaujot katru apakšsarakstu elementu.
Python3
# 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)> |
>
>Izvade
[1, 2, 3, 4, 5, 6, 7, 8, 9]>
4. piemērs: manipulējiet ar virkni, izmantojot saraksta izpratni
Bez saraksta izpratnes
Šajā piemērā 2D saraksts ar nosaukumumatrix>
kas satur virknes, tiek modificēts, izmantojot ligzdotu cilpas . Iekšējā cilpa katra augļa pirmo burtu raksta ar lielo burtu, un ārējā cilpa veido jaunu 2D sarakstu,modified_matrix>
, ar lielajiem burtiem, kā rezultātā tiek izveidota virkņu matrica ar sākuma lielajiem burtiem.
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)> |
>
>Izvade
[['Apple', 'Banana', 'Cherry'], ['Date', 'Fig', 'Grape'], ['Kiwi', 'Lemon', 'Mango']]>
Ar saraksta izpratni
Šajā piemērā 2D saraksts ar nosaukumumatrix>
kas satur virknes, tiek pārveidots, izmantojot ligzdoto saraksta izpratni. Izteiciens[[fruit.capitalize() for fruit in row] for row in matrix]>
efektīvi ģenerē modificētu matricu, kurā katra augļa pirmais burts tiek rakstīts ar lielo burtu, kā rezultātā tiek izveidota jauna virkņu matrica ar sākotnējiem lielajiem burtiem.
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)> |
>
>Izvade
[['Apple', 'Banana', 'Cherry'], ['Date', 'Fig', 'Grape'], ['Kiwi', 'Lemon', 'Mango']]>