logo

Python — saraksta izpratne

Python saraksta izpratne sastāv no iekavām, kas satur izteiksmi, kas tiek izpildīta katram elementam kopā ar for cilpu, lai atkārtotu katru Python saraksta elementu.

Piemērs:



Python






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



>

>

Izvade

[24, 26, 28]>

Python saraksta izpratnes sintakse

Sintakse: jauns saraksts = [ izteiksme(elements) priekš elements iekšā vecais saraksts ja stāvokli ]

Parametrs:

    izteiksme: apzīmē darbību, kuru vēlaties izpildīt katram iterējamā vienumam. elements : termins mainīgais attiecas uz katru vērtību, kas iegūta no iterējamā. iterējams : norādiet elementu secību, ko vēlaties atkārtot (piemēram, saraksts, kortežs vai virkne). nosacījums: (Neobligāti) Filtrs palīdz izlemt, vai elements ir jāpievieno jaunajam sarakstam.

Atgriezties: Saraksta izpratnes atgriešanas vērtība ir jauns saraksts, kas satur modificētos elementus, kas atbilst dotajiem kritērijiem.

Python saraksta izpratne nodrošina daudz īsāku sintaksi jauna saraksta izveidei, pamatojoties uz esoša saraksta vērtībām.

Saraksta izpratne Python piemērā

Šeit ir piemērs, kā izmantot saraksta izpratni, lai Python programmā atrastu skaitļa kvadrātu.

Python




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

>

>

Izvade

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

Iterācija ar saraksta izpratni

Šajā piemērā mēs sarakstam piešķiram 1, 2 un 3, un mēs izdrukājam sarakstu, izmantojot saraksta izpratni.

Python




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

>

>

Izvade

[1, 2, 3]>

Pat saraksts, izmantojot saraksta izpratni

Šajā piemērā mēs drukājam pāra skaitļus no 0 līdz 10, izmantojot saraksta izpratni.

Python




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

>

>

Izvade

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

Matrica, izmantojot saraksta izpratni

Šajā piemērā mēs piešķiram veselus skaitļus no 0 līdz 2 līdz 3 matricas rindām un izdrukājam to, izmantojot saraksta izpratni.

Python




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

>

>

Izvade

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

Saraksta izpratne pret cilpu

Ir dažādi veidi, kā atkārtot sarakstu. Tomēr visizplatītākā pieeja ir izmantot priekš cilpa . Apskatīsim tālāk redzamo piemēru:

Python




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

>

>

Izvade

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

Iepriekš ir aprakstīta tradicionālās iterācijas pieejas ieviešana, izmantojot sarakstu, virkni, virkni utt. Tagad Python saraksta izpratne veic to pašu uzdevumu, kā arī padara programmu vienkāršāku.

Saraksta izpratne tulko tradicionālo iterācijas pieeju, izmantojot cilpai vienkāršā formulā, tādējādi padarot tos viegli lietojamus. Tālāk ir sniegta pieeja iterācijai, izmantojot sarakstu, virkni, virkni utt., izmantojot saraksta izpratni programmā Python.

Python




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

>

>

Izvade

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

Laika analīze saraksta izpratnē un cilpā

Python saraksta izpratne ir efektīvāka gan skaitļošanas, gan telpas un laika kodēšanas ziņā nekā a for cilpa. Parasti tie ir rakstīti vienā koda rindā. Tālāk esošajā programmā ir attēlota atšķirība starp cilpām un saraksta izpratni, pamatojoties uz veiktspēju.

Python


python konvertē baitus par virkni



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

>

>

Izvade

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

No iepriekš minētās programmas mēs redzam, ka saraksta izpratne ir diezgan ātrāka nekā cilpai.

Ligzdoto sarakstu izpratne

Ligzdoto sarakstu izpratne nav nekas cits kā saraksta izpratne citā saraksta izpratnē, kas ir diezgan līdzīga ligzdotajām cilpām. Zemāk ir programma, kas ievieš ligzdotu cilpu:

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

>

>

Izvade

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

Tagad, izmantojot ligzdoto sarakstu izpratni, to pašu izvadi var ģenerēt mazākā koda rindiņā.

Python




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

>

>

Izvade

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

Saraksta izpratne un lambda

Lambda izteiksmes ir nekas cits kā Python funkciju saīsinājumi. Izmantojot saraksta izpratni ar lambda, tiek izveidota efektīva kombinācija. Apskatīsim tālāk sniegtos piemērus:

Šajā piemērā mēs sarakstā ievietojam skaitļus no 10 līdz 50 un izdrukājam to.

Python




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

>

>

Izvade

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

Šeit mēs izmantojām cilpu, lai izdrukātu tabulu ar 10.

Python


salīdzināms interfeiss java



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

>

>

Izvade

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

Tagad šeit mēs esam izmantojuši tikai saraksta izpratni, lai parādītu tabulu ar 10.

Python




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

>

>

Izvade

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

Visbeidzot, mēs izmantojam lambda + saraksta izpratni, lai parādītu tabulu ar 10. Šī kombinācija ir ļoti noderīga, lai sarežģītu problēmu gadījumā iegūtu efektīvus risinājumus mazākā koda rindu skaitā.

Nosacījumi saraksta izpratnē

Saraksta izpratnei varam pievienot arī nosacījumu paziņojumus. Mēs varam izveidot sarakstu, izmantojot diapazons (), operatoriem uc un cal arī piemēro dažus nosacījumus sarakstam, izmantojot ja paziņojums .

Galvenie punkti

  • Saraksta izpratne ir efektīvs līdzeklis sarakstu aprakstīšanai un izveidošanai, pamatojoties uz pašreizējiem sarakstiem.
  • Parasti saraksta izpratne ir viegla un vienkāršāka nekā standarta saraksta veidošanas funkcijas un cilpas.
  • Mēs nedrīkstam rakstīt garus kodus saraksta izpratnei, lai nodrošinātu lietotājam draudzīgu kodu.
  • Katru saraksta izpratni var pārrakstīt for cilpa, bet saraksta interpretācijas kontekstā katru for cilpu nevar pārrakstīt.

Tālāk ir sniegti daži piemēri, kas attēlo sarakstu izpratnes izmantošanu, nevis tradicionālo pieeju iterācijai, izmantojot iterējamo:

Python saraksta izpratne, izmantojot If-else.

Piemērā mēs pārbaudām, vai no 0 līdz 7, ja skaitlis ir pāra, tad ievietojiet Pāra skaitlis uz sarakstu cits ievietojiet Nepāra skaitlis uz sarakstu.

Python




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

>

>

Izvade

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

Ligzdots IF ar saraksta izpratni

Šajā piemērā mēs sarakstā ievietojam skaitļus, kas ir reizināti ar 10 līdz 100, un izdrukājam to.

Python




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

>

>

Izvade

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

Parādiet skaitļu kvadrātu no 1 līdz 10

Šajā piemērā mēs sarakstā ievietojam kvadrātu no 1 līdz 10 un izdrukājam sarakstu.

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

>

>

Izvade

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

Displeja 2D matricas transponēšana

Šajā piemērā mēs transponējam matricu, izmantojot saraksta izpratni.

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

>

>

Izvade

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

Pārslēgt katras virknes rakstzīmes reģistru

Šajā piemērā mēs pārslēdzam katras rakstzīmes reģistru noteiktā virknē, izmantojot operatoru XOR ar 32, un saglabājam rezultātu sarakstā.

Python




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

>

>

Izvade

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

Apgrieziet katru virkni korektorā

Šajā piemērā mēs apgriežam virknes cilpai un ievietojam tās sarakstā un izdrukājam sarakstu.

Python




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

>

>

Izvade

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

Tuples saraksta izveide no diviem atsevišķiem sarakstiem

Šajā piemērā mēs esam izveidojuši divus sarakstus ar vārdi un vecumi. Mēs lietojam zip() saraksta izpratnē, un mēs ievietojam vārdu un vecumu kā saraksta virkni. Visbeidzot, mēs izdrukājam korešu sarakstu.

Python




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

>

>

Izvade:

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

Parādiet visu nepāra elementu ciparu summu sarakstā.

Šajā piemērā mēs esam izveidojuši sarakstu un atrodam katra nepāra elementa ciparu summu sarakstā.

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

>

>

Izvade

[16, 3, 18, 18]>

Saraksta izpratnes priekšrocības

  • Laika un telpas ziņā efektīvāk nekā cilpas.
  • Nepieciešams mazāk koda rindiņu.
  • Pārveido iteratīvo paziņojumu formulā.

Python saraksta izpratnes vingrinājumu jautājumi

Zemāk ir divi vingrinājumu jautājumi par Python saraksta izpratni. Mēs esam apskatījuši pamata saraksta izpratnes kodu, lai atrastu skaitļu kubu, un kodu, lai atrastu vārda garumu, izmantojot saraksta izpratni un funkciju len().

Q1. Ciparu kuba uzdevuma jautājums, izmantojot saraksta izpratni

Python




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

>

kas ir 25 no 100
>

Izvade

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

Q2. Vārda garuma uzdevuma jautājuma atrašana, izmantojot saraksta izpratni

Python




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

>

>

Izvade

[5, 6, 6, 6]>