logo

Python – sąrašo supratimas

Python sąrašo supratimas susideda iš skliaustų, kuriuose yra išraiška, kuri vykdoma kiekvienam elementui kartu su for ciklu, kad būtų kartojamas kiekvienas Python sąrašo elementas.

Pavyzdys:

Python






numbers>=> [>12>,>13>,>14>,]> doubled>=> [x>*>2> for> x>in> numbers]> print>(doubled)>

>

>

Išvestis

[24, 26, 28]>

Python sąrašo supratimo sintaksė

Sintaksė: naujas sąrašas = [ išraiška (elementas) dėl elementas in senasis sąrašas jeigu sąlyga ]

Parametras:

    išraiška : reiškia operaciją, kurią norite atlikti kiekvienam iteravimo elementui. elementas : terminas kintamasis reiškia kiekvieną reikšmę, paimtą iš iteracijos. iterable : nurodykite elementų, kuriuos norite kartoti, seką (pvz., sąrašą, eilutę arba eilutę). sąlyga : (pasirenkama) Filtras padeda nuspręsti, ar elementas turi būti įtrauktas į naują sąrašą.

Grąžinti: Grąžinama sąrašo supratimo reikšmė yra naujas sąrašas, kuriame yra modifikuotų elementų, atitinkančių nurodytus kriterijus.

Python sąrašo supratimas suteikia daug trumpesnę sintaksę kuriant naują sąrašą pagal esamo sąrašo reikšmes.

Sąrašo supratimas Python pavyzdyje

Štai pavyzdys, kaip naudoti sąrašo supratimą norint rasti skaičiaus kvadratą Python.

Python




numbers>=> [>1>,>2>,>3>,>4>,>5>]> squared>=> [x>*>*> 2> for> x>in> numbers]> print>(squared)>

>

>

Išvestis

[1, 4, 9, 16, 25]>

Iteracija su sąrašo supratimu

Šiame pavyzdyje sąrašui priskiriame 1, 2 ir 3, o sąrašą spausdiname naudodami sąrašo supratimą.

Python




# Using list comprehension to iterate through loop> List> => [character>for> character>in> [>1>,>2>,>3>]]> > # Displaying list> print>(>List>)>

>

>

Išvestis

[1, 2, 3]>

Lygus sąrašas naudojant sąrašo supratimą

Šiame pavyzdyje lyginius skaičius nuo 0 iki 10 spausdiname naudodami sąrašo supratimą.

Python




list> => [i>for> i>in> range>(>11>)>if> i>%> 2> =>=> 0>]> print>(>list>)>

>

>

Išvestis

[0, 2, 4, 6, 8, 10]>

Matrica naudojant sąrašo supratimą

Šiame pavyzdyje mes priskiriame sveikuosius skaičius nuo 0 iki 2 iki 3 matricos eilučių ir spausdiname ją naudodami sąrašo supratimą.

Python




matrix>=> [[j>for> j>in> range>(>3>)]>for> i>in> range>(>3>)]> > print>(matrix)>

>

>

Išvestis

[[0, 1, 2], [0, 1, 2], [0, 1, 2]]>

Sąrašo supratimai vs For Loop

Yra įvairių būdų, kaip kartoti sąrašą. Tačiau labiausiai paplitęs būdas yra naudoti dėl kilpa . Pažiūrėkime į žemiau pateiktą pavyzdį:

Python




# Empty list> List> => []> > # Traditional approach of iterating> for> character>in> 'Geeks 4 Geeks!'>:> >List>.append(character)> > # Display list> print>(>List>)>

>

>

Išvestis

['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']>

Aukščiau pateiktas tradicinio kartojimo per sąrašą, eilutę, eilutę ir tt metodo įgyvendinimas. Dabar Python sąrašo supratimas atlieka tą pačią užduotį, be to, programa tampa paprastesnė.

Sąrašo supratimai verčia tradicinį iteracijos metodą naudojant už kilpą į paprastą formulę, todėl jas lengva naudoti. Toliau pateikiamas būdas kartoti sąrašą, eilutę, eilutę ir pan., naudojant sąrašo supratimą Python.

Python




# Using list comprehension to iterate through loop> List> => [character>for> character>in> 'Geeks 4 Geeks!'>]> > # Displaying list> print>(>List>)>

>

>

Išvestis

['G', 'e', 'e', 'k', 's', ' ', '4', ' ', 'G', 'e', 'e', 'k', 's', '!']>

Sąrašo supratimo ir ciklo laiko analizė

Sąrašo supratimas „Python“ yra efektyvesnis tiek skaičiavimo, tiek erdvės ir laiko kodavimo požiūriu, nei a for ciklas. Paprastai jie rašomi vienoje kodo eilutėje. Toliau pateiktoje programoje pavaizduotas skirtumas tarp kilpų ir sąrašo supratimo, atsižvelgiant į našumą.

Python


10 iš 1 mln



# 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>))>

>

>

Išvestis

Time taken for_loop: 0.39 Time taken for list_comprehension: 0.35>

Iš aukščiau pateiktos programos matome, kad sąrašo supratimas yra gana greitesnis nei ciklo.

Įdėto sąrašo supratimai

Įdėto sąrašo supratimai yra ne kas kita, kaip sąrašo supratimas kitame sąrašo suvokime, kuris yra gana panašus į įdėtą kilpoms. Žemiau yra programa, kuri įgyvendina įdėtą kilpą:

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

>

>

Išvestis

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

Dabar naudojant įdėto sąrašo supratimą ta pati išvestis gali būti sugeneruota mažiau kodo eilučių.

Python




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

>

>

Išvestis

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

Sąrašas supratimas ir lambda

Lambda išraiškos yra ne kas kita, kaip Python funkcijų trumpiniai atvaizdai. Sąrašo supratimo naudojimas su lambda sukuria efektyvų derinį. Pažvelkime į toliau pateiktus pavyzdžius:

Šiame pavyzdyje į sąrašą įterpiame skaičius nuo 10 iki 50 ir jį atspausdiname.

Python




android procesas acore vis sustoja
# using lambda to print table of 10> numbers>=> []> > for> i>in> range>(>1>,>6>):> >numbers.append(i>*>10>)> > print>(numbers)>

>

>

Išvestis

[10, 20, 30, 40, 50]>

Čia mes naudojome kilpą, norėdami atspausdinti 10 lentelę.

Python




numbers>=> [i>*>10> for> i>in> range>(>1>,>6>)]> > print>(numbers)>

>

>

Išvestis

[10, 20, 30, 40, 50]>

Dabar čia, norėdami parodyti 10 lentelę, naudojome tik sąrašo supratimą.

Python




# using lambda to print table of 10> numbers>=> list>(>map>(>lambda> i: i>*>10>, [i>for> i>in> range>(>1>,>6>)]))> > print>(numbers)>

>

>

Išvestis

[10, 20, 30, 40, 50]>

Galiausiai, mes naudojame lambda + sąrašo supratimą, kad būtų rodoma 10 lentelė. Šis derinys yra labai naudingas norint gauti efektyvius sprendimus naudojant mažiau kodo eilučių sudėtingoms problemoms spręsti.

Sąlygos sąrašo suvokime

Taip pat prie sąrašo supratimo galime pridėti sąlyginių teiginių. Sąrašą galime sudaryti naudodami diapazonas(), operatoriai ir tt ir cal taip pat taiko kai kurias sąlygas sąrašui naudodami jei teiginys .

Pagrindiniai klausimai

  • Sąrašo supratimas yra veiksminga priemonė sąrašams apibūdinti ir sudaryti remiantis esamais sąrašais.
  • Paprastai sąrašo supratimas yra lengvas ir paprastesnis nei standartinės sąrašo formavimo funkcijos ir kilpos.
  • Neturėtume rašyti ilgų kodų sąrašo supratimui, kad būtų užtikrintas patogus vartotojui kodas.
  • Kiekvienas sąrašo supratimas gali būti perrašytas į kilpą, tačiau sąrašo interpretavimo kontekste kiekvienas for ciklas negali būti perrašytas.

Toliau pateikiami keli pavyzdžiai, kuriuose vaizduojamas sąrašo supratimo naudojimas, o ne tradicinis metodas kartoti iteruojamą:

Python sąrašo supratimas naudojant If-else.

Pavyzdyje mes tikriname, kad nuo 0 iki 7, jei skaičius lygus, tada įterpkite Lyginis skaičius į sąrašą kitą įterpti Nelyginis skaičius į sąrašą.

Python




lis>=> [>'Even number'> if> i>%> 2> =>=> 0> >else> 'Odd number'> for> i>in> range>(>8>)]> print>(lis)>

>

>

Išvestis

['Even number', 'Odd number', 'Even number', 'Odd number', 'Even number', 'Odd number', 'Even number', 'Odd number']>

Įdėtas IF su sąrašo supratimu

Šiame pavyzdyje į sąrašą įterpiame skaičius, kurie yra 10 ir 100 kartotiniai, ir spausdiname.

Python




lis>=> [num>for> num>in> range>(>100>)> >if> num>%> 5> =>=> 0> if> num>%> 10> =>=> 0>]> print>(lis)>

>

>

Išvestis

[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]>

Parodykite skaičių nuo 1 iki 10 kvadratą

Šiame pavyzdyje į sąrašą įterpiame kvadratą nuo 1 iki 10 ir spausdiname sąrašą.

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

>

>

Išvestis

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]>

2D matricos ekrano perkėlimas

Šiame pavyzdyje mes transponuojame matricą naudodami sąrašo supratimą.

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

>

>

Išvestis

[[10, 40, 70], [20, 50, 80], [30, 60, 90]]>

Perjungti kiekvieno eilutės simbolio didžiąsias ir mažąsias raides

Šiame pavyzdyje mes perjungiame kiekvieno simbolio didžiąsias ir mažąsias raides tam tikroje eilutėje naudodami XOR operatorių su 32 ir išsaugome rezultatą sąraše.

Python




# Initializing string> string>=> 'Geeks4Geeks'> > # Toggle case of each character> List> => list>(>map>(>lambda> i:>chr>(>ord>(i) ^>32>), string))> > # Display list> print>(>List>)>

>

>

Išvestis

['g', 'E', 'E', 'K', 'S', 'x14', 'g', 'E', 'E', 'K', 'S']>

Apverskite kiekvieną eilutę kortelėje

Šiame pavyzdyje mes apverčiame eilutes į kilpą ir įterpiame jas į sąrašą ir spausdiname sąrašą.

Python




# Reverse each string in tuple> List> => [string[::>->1>]>for> string>in> (>'Geeks'>,>'for'>,>'Geeks'>)]> > # Display list> print>(>List>)>

>

kas yra const java

>

Išvestis

['skeeG', 'rof', 'skeeG']>

Kortelių sąrašo kūrimas iš dviejų atskirų sąrašų

Šiame pavyzdyje sukūrėme du sąrašus vardai ir amžius. Mes naudojame zip () sąrašo supratimo srityje, o vardą ir amžių įterpiame į sąrašą. Galiausiai spausdiname kortelių sąrašą.

Python




names>=> [>'G'>,>'G'>,>'g'>]> ages>=> [>25>,>30>,>35>]> person_tuples>=> [(name, age)>for> name, age>in> zip>(names, ages)]> print>(person_tuples)>

>

>

Išvestis:

[('G', 25), ('G', 30), ('g', 35)]>

Rodyti visų nelyginių elementų skaitmenų sumą sąraše.

Šiame pavyzdyje sukūrėme sąrašą ir randame kiekvieno nelyginio sąrašo elemento skaitmenų sumą.

Python




# 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)>

>

>

Išvestis

[16, 3, 18, 18]>

Sąrašo supratimo privalumai

  • Efektyviau laiko ir vietos atžvilgiu nei kilpos.
  • Reikalauti mažiau kodo eilučių.
  • Iteratyvus teiginys paverčiamas formule.

Python sąrašo supratimo pratybų klausimai

Žemiau pateikiami du pratimų klausimai apie Python sąrašo supratimą. Apžvelgėme pagrindinį sąrašo supratimo kodą, skirtą skaičių kubui rasti, ir kodą, kad rastume žodžio ilgį, naudodami sąrašo supratimą ir funkciją len().

Q1. Skaičių kubo pratimo klausimas naudojant sąrašo supratimą

Python




numbers>=> [>1>,>2>,>3>,>4>,>5>,>6>,>7>,>8>,>9>,>10>]> cube>=> [number>*>*>3> for> number>in> numbers]> print>(cube)>

>

>

Išvestis

[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]>

Q2. Žodžio ilgio pratimo klausimo paieška naudojant sąrašo supratimą

Python




words>=> [>'apple'>,>'banana'>,>'cherry'>,>'orange'>]> word_lengths>=> [>len>(word)>for> word>in> words]> print>(word_lengths)>

>

>

Išvestis

[5, 6, 6, 6]>