Porozumenie zoznamu Python pozostáva zo zátvoriek obsahujúcich výraz, ktorý sa vykoná pre každý prvok spolu s cyklom for na iteráciu každého prvku v zozname Python.
Príklad:
Python
numbers>=> [>12>,>13>,>14>,]> doubled>=> [x>*>2> for> x>in> numbers]> print>(doubled)> |
>
>
Výkon
[24, 26, 28]>
Syntax porozumenia zoznamu Python
Syntax: novýZoznam = [ výraz (prvok) pre element v oldList ak stave ]
Parameter:
výraz : Predstavuje operáciu, ktorú chcete vykonať s každou položkou v rámci iterovateľnej položky. element : Termín premenná sa vzťahuje na každú hodnotu prevzatú z iterovateľného. iterable : zadajte postupnosť prvkov, cez ktoré chcete iterovať. (napr. zoznam, n-tica alebo reťazec). podmienka : (Voliteľné) Filter pomáha rozhodnúť, či má byť prvok pridaný do nového zoznamu alebo nie.
Návrat: Návratová hodnota porozumenia zoznamu je nový zoznam obsahujúci upravené prvky, ktoré spĺňajú dané kritériá.
Porozumenie zoznamu Python poskytuje oveľa kratšiu syntax na vytvorenie nového zoznamu na základe hodnôt existujúceho zoznamu.
Porozumenie zoznamu v príklade Python
Tu je príklad použitia porozumenia zoznamu na nájdenie druhej mocniny čísla v Pythone.
Python
numbers>=> [>1>,>2>,>3>,>4>,>5>]> squared>=> [x>*>*> 2> for> x>in> numbers]> print>(squared)> |
>
>
Výkon
[1, 4, 9, 16, 25]>
Iterácia s porozumením zoznamu
V tomto príklade priraďujeme k zoznamu 1, 2 a 3 a tlačíme zoznam pomocou funkcie List Comprehension.
Python
# Using list comprehension to iterate through loop> List> => [character>for> character>in> [>1>,>2>,>3>]]> > # Displaying list> print>(>List>)> |
>
>
Výkon
[1, 2, 3]>
Párny zoznam pomocou funkcie List Comprehension
V tomto príklade tlačíme párne čísla od 0 do 10 pomocou funkcie List Comprehension.
Python
list> => [i>for> i>in> range>(>11>)>if> i>%> 2> =>=> 0>]> print>(>list>)> |
>
>
Výkon
[0, 2, 4, 6, 8, 10]>
Matica pomocou funkcie List Comprehension
V tomto príklade priraďujeme celé čísla 0 až 2 až 3 riadkom matice a vytlačíme ju pomocou funkcie List Comprehension.
Python
matrix>=> [[j>for> j>in> range>(>3>)]>for> i>in> range>(>3>)]> > print>(matrix)> |
>
>
Výkon
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]>
Zoznam porozumení vs pre slučku
Existujú rôzne spôsoby iterácie cez zoznam. Najbežnejším prístupom je však použitie pre slučka . Pozrime sa na nižšie uvedený príklad:
Python
# Empty list> List> => []> > # Traditional approach of iterating> for> character>in> 'Geeks 4 Geeks!'>:> >List>.append(character)> > # Display list> print>(>List>)> |
>
>
Výkon
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']>
Vyššie je implementácia tradičného prístupu k iterácii cez zoznam, reťazec, n-ticu atď. Teraz, porozumenie zoznamu v Pythone robí rovnakú úlohu a tiež robí program jednoduchším.
List Comprehensions prekladajú tradičný iteračný prístup pomocou pre slučku do jednoduchého vzorca, vďaka čomu sa ľahko používajú. Nižšie je uvedený prístup k iterácii cez zoznam, reťazec, n-ticu atď. pomocou porozumenia zoznamu v Pythone.
Python
# Using list comprehension to iterate through loop> List> => [character>for> character>in> 'Geeks 4 Geeks!'>]> > # Displaying list> print>(>List>)> |
>
>
Výkon
['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']>
Časová analýza v List Comprehensions a Loop
Porozumenia zoznamu v Pythone sú efektívnejšie ako výpočtovo, tak aj z hľadiska priestoru a času kódovania ako cyklus for. Zvyčajne sú napísané v jednom riadku kódu. Nižšie uvedený program zobrazuje rozdiel medzi slučkami a porozumením zoznamu na základe výkonu.
Python
java parseint
# Import required module> import> time> > > # define function to implement for loop> def> for_loop(n):> >result>=> []> >for> i>in> range>(n):> >result.append(i>*>*>2>)> >return> result> > > # define function to implement list comprehension> def> list_comprehension(n):> >return> [i>*>*>2> for> i>in> range>(n)]> > > # Driver Code> > # Calculate time taken by for_loop()> begin>=> time.time()> for_loop(>10>*>*>6>)> end>=> time.time()> > # Display time taken by for_loop()> print>(>'Time taken for_loop:'>,>round>(end>->begin,>2>))> > # Calculate time takens by list_comprehension()> begin>=> time.time()> list_comprehension(>10>*>*>6>)> end>=> time.time()> > # Display time taken by for_loop()> print>(>'Time taken for list_comprehension:'>,>round>(end>->begin,>2>))> |
>
>
Výkon
Time taken for_loop: 0.39 Time taken for list_comprehension: 0.35>
Z vyššie uvedeného programu vidíme, že porozumenie zoznamu je oveľa rýchlejšie ako slučka for.
Porozumenia vnoreného zoznamu
Porozumenia vnoreného zoznamu nie sú nič iné ako porozumenie zoznamu v rámci iného pochopenia zoznamu, ktoré je celkom podobné vnoreným slučkám for. Nižšie je uvedený program, ktorý implementuje vnorenú slučku:
Python
matrix>=> []> > for> i>in> range>(>3>):> > ># Append an empty sublist inside the list> >matrix.append([])> > >for> j>in> range>(>5>):> >matrix[i].append(j)> > print>(matrix)> |
>
>
Výkon
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]>
Teraz pomocou porozumení vnoreného zoznamu možno rovnaký výstup vygenerovať v menšom počte riadkov kódu.
reťazec do json java
Python
# Nested list comprehension> matrix>=> [[j>for> j>in> range>(>5>)]>for> i>in> range>(>3>)]> > print>(matrix)> |
>
>
Výkon
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]>
Zoznam porozumení a lambda
Lambda výrazy nie sú nič iné ako skratkové reprezentácie funkcií Pythonu. Použitie porozumenia zoznamu s lambda vytvára efektívnu kombináciu. Pozrime sa na nižšie uvedené príklady:
V tomto príklade vkladáme do zoznamu čísla od 10 do 50 a vytlačíme ho.
Python
# using lambda to print table of 10> numbers>=> []> > for> i>in> range>(>1>,>6>):> >numbers.append(i>*>10>)> > print>(numbers)> |
>
>
Výkon
[10, 20, 30, 40, 50]>
Tu sme použili for loop na vytlačenie tabuľky 10.
Python
numbers>=> [i>*>10> for> i>in> range>(>1>,>6>)]> > print>(numbers)> |
>
>
Výkon
[10, 20, 30, 40, 50]>
Teraz sme na zobrazenie tabuľky s 10 použili iba porozumenie zoznamu.
Python
# using lambda to print table of 10> numbers>=> list>(>map>(>lambda> i: i>*>10>, [i>for> i>in> range>(>1>,>6>)]))> > print>(numbers)> |
>
>
Výkon
[10, 20, 30, 40, 50]>
Nakoniec používame lambda + porozumenie zoznamu na zobrazenie tabuľky 10. Táto kombinácia je veľmi užitočná na získanie efektívnych riešení v menšom počte riadkov kódu pre zložité problémy.
Podmienky v porozumení zoznamu
Do porozumenia zoznamu môžeme pridať aj podmienené príkazy. Zoznam môžeme vytvoriť pomocou rozsah(), operátorov , atď. a cal tiež použiť niektoré podmienky na zoznam pomocou ak vyhlásenie .
Kľúčové body
- Porozumenie zoznamu je účinným prostriedkom na popis a zostavenie zoznamov na základe aktuálnych zoznamov.
- Vo všeobecnosti je porozumenie zoznamu ľahké a jednoduchšie ako štandardné funkcie a slučky na vytváranie zoznamov.
- Nemali by sme písať dlhé kódy na porozumenie zoznamu, aby sme zabezpečili užívateľsky prívetivý kód.
- Každé pochopenie zoznamu je možné prepísať v slučke for, ale v kontexte interpretácie zoznamu nemožno prepísať každú slučku for.
Nižšie je uvedených niekoľko príkladov, ktoré zobrazujú použitie pochopenia zoznamu namiesto tradičného prístupu k iterácii:
Porozumenie zoznamu Python pomocou If-else.
V príklade kontrolujeme, že od 0 do 7, ak je číslo párne, potom vložte Párne číslo do zoznamu inak vložiť Nepárne číslo do zoznamu.
Python
lis>=> [>'Even number'> if> i>%> 2> =>=> 0> >else> 'Odd number'> for> i>in> range>(>8>)]> print>(lis)> |
>
>
Výkon
['Even number', 'Odd number', 'Even number', 'Odd number', 'Even number', 'Odd number', 'Even number', 'Odd number']>
Vnorené IF s porozumením zoznamu
V tomto príklade vkladáme čísla do zoznamu, ktorý je násobkom 10 až 100, a vytlačíme ho.
Python
lis>=> [num>for> num>in> range>(>100>)> >if> num>%> 5> =>=> 0> if> num>%> 10> =>=> 0>]> print>(lis)> |
>
>
Výkon
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]>
Zobrazte štvorec čísel od 1 do 10
V tomto príklade vkladáme štvorec od 1 do 10 do zoznamu a vytlačíme zoznam.
Python
# Getting square of number from 1 to 10> squares>=> [n>*>*>2> for> n>in> range>(>1>,>11>)]> > # Display square of even numbers> print>(squares)> |
>
>
Výkon
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]>
Zobrazenie transpozície 2D matice
V tomto príklade robíme transpozíciu matice pomocou porozumenia zoznamu.
Python
# Assign matrix> twoDMatrix>=> [[>10>,>20>,>30>],> >[>40>,>50>,>60>],> >[>70>,>80>,>90>]]> > # Generate transpose> trans>=> [[i[j]>for> i>in> twoDMatrix]>for> j>in> range>(>len>(twoDMatrix[>0>]))]> > print>(trans)> |
>
>
Výkon
[[10, 40, 70], [20, 50, 80], [30, 60, 90]]>
Prepínať veľké a malé písmená každého znaku v reťazci
V tomto príklade prepíname veľkosť písmen každého znaku v danom reťazci pomocou operátora XOR s 32 a výsledok uložíme do zoznamu.
Python
# Initializing string> string>=> 'Geeks4Geeks'> > # Toggle case of each character> List> => list>(>map>(>lambda> i:>chr>(>ord>(i) ^>32>), string))> > # Display list> print>(>List>)> |
>
>
Výkon
['g', 'E', 'E', 'K', 'S', 'x14', 'g', 'E', 'E', 'K', 'S']>
Obráťte každý reťazec v Tuple
V tomto príklade obraciame reťazce v slučke for a vkladáme ich do zoznamu a tlačíme zoznam.
Python
# Reverse each string in tuple> List> => [string[::>->1>]>for> string>in> (>'Geeks'>,>'for'>,>'Geeks'>)]> > # Display list> print>(>List>)> |
>
>
Výkon
['skeeG', 'rof', 'skeeG']>
Vytvorenie zoznamu n-tic z dvoch samostatných zoznamov
V tomto príklade sme vytvorili dva zoznamy mená a vek. Používame PSČ() v porozumení zoznamu a do zoznamu vkladáme meno a vek ako n-ticu. Nakoniec vytlačíme zoznam n-tic.
Python
names>=> [>'G'>,>'G'>,>'g'>]> ages>=> [>25>,>30>,>35>]> person_tuples>=> [(name, age)>for> name, age>in> zip>(names, ages)]> print>(person_tuples)> |
>
>
Výkon:
[('G', 25), ('G', 30), ('g', 35)]> Zobrazte súčet číslic všetkých nepárnych prvkov v zozname.
V tomto príklade sme vytvorili zoznam a hľadáme ciferný súčet každého nepárneho prvku v zozname.
Python
čo je maven
# Explicit function> def> digitSum(n):> >dsum>=> 0> >for> ele>in> str>(n):> >dsum>+>=> int>(ele)> >return> dsum> > > # Initializing list> List> => [>367>,>111>,>562>,>945>,>6726>,>873>]> > # Using the function on odd elements of the list> newList>=> [digitSum(i)>for> i>in> List> if> i &>1>]> > # Displaying new list> print>(newList)> |
>
>
Výkon
[16, 3, 18, 18]>
Výhody porozumenia zoznamu
- Časovo a priestorovo efektívnejšie ako slučky.
- Vyžadovať menej riadkov kódu.
- Transformuje iteračný príkaz na vzorec.
Otázky na cvičenie na porozumenie zoznamu jazyka Python
Nižšie sú uvedené dve cvičebné otázky o porozumení zoznamu Python. Pokryli sme základný kód porozumenia zoznamu na nájdenie kocky čísel a kód na nájdenie dĺžky slova pomocou porozumenia zoznamu a funkcie len().
Q1. Cvičiaca otázka na kocku s použitím porozumenia zoznamu
Python
numbers>=> [>1>,>2>,>3>,>4>,>5>,>6>,>7>,>8>,>9>,>10>]> cube>=> [number>*>*>3> for> number>in> numbers]> print>(cube)> |
>
>
Výkon
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]>
Q2. Cvičenie na nájdenie dĺžky slova pomocou porozumenia zoznamu
Python
words>=> [>'apple'>,>'banana'>,>'cherry'>,>'orange'>]> word_lengths>=> [>len>(word)>for> word>in> words]> print>(word_lengths)> |
>
>
Výkon
[5, 6, 6, 6]>