logo

Python – Listeforståelse

En Python-listeforståelse består av parenteser som inneholder uttrykket, som utføres for hvert element sammen med for-løkken for å iterere over hvert element i Python-listen.

Eksempel:

Python






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

>

>

Produksjon

[24, 26, 28]>

Python-listeforståelsessyntaks

Syntaks: ny liste = [ uttrykk (element) til element i gammelliste hvis betingelse ]

Parameter:

    uttrykk : Representerer operasjonen du vil utføre på hvert element i den iterable. element : Begrepet variabel refererer til hver verdi hentet fra den iterable. iterable : spesifiser sekvensen av elementer du vil iterere gjennom. (f.eks. en liste, tuppel eller streng). betingelse : (Valgfritt) Et filter hjelper med å bestemme om et element skal legges til i den nye listen.

Komme tilbake: Returverdien til en listeforståelse er en ny liste som inneholder de modifiserte elementene som tilfredsstiller de gitte kriteriene.

Python List-forståelse gir en mye kortere syntaks for å lage en ny liste basert på verdiene til en eksisterende liste.

Listeforståelse i Python-eksempel

Her er et eksempel på bruk av listeforståelse for å finne kvadratet av tallet i Python.

Python




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

>

>

Produksjon

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

Iterasjon med listeforståelse

I dette eksemplet tildeler vi 1, 2 og 3 til listen, og vi skriver ut listen ved å bruke Listeforståelse.

Python




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

>

>

Produksjon

[1, 2, 3]>

Even liste ved hjelp av listeforståelse

I dette eksemplet skriver vi ut partallene fra 0 til 10 ved å bruke Listeforståelse.

Python




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

>

>

Produksjon

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

Matrise ved hjelp av listeforståelse

I dette eksemplet tildeler vi heltall 0 til 2 til 3 rader i matrisen og skriver den ut ved å bruke Listeforståelse.

Python




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

>

>

Produksjon

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

Listeforståelser vs for loop

Det er forskjellige måter å iterere gjennom en liste. Den vanligste tilnærmingen er imidlertid å bruke til Løkke . La oss se på eksemplet nedenfor:

Python




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

>

>

Produksjon

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

Ovenfor er implementeringen av den tradisjonelle tilnærmingen til å iterere gjennom en liste, streng, tuppel osv. Nå gjør listeforståelse i Python den samme oppgaven og gjør også programmet enklere.

Listeforståelser oversetter den tradisjonelle iterasjonstilnærmingen ved hjelp av for løkke til en enkel formel som gjør dem enkle å bruke. Nedenfor er tilnærmingen til å iterere gjennom en liste, streng, tuppel, etc. ved å bruke listeforståelse i Python.

Python




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

>

>

Produksjon

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

Tidsanalyse i listeforståelser og loop

Listeforståelsene i Python er mer effektive både beregningsmessig og når det gjelder koding av plass og tid enn en for en loop. Vanligvis er de skrevet i en enkelt kodelinje. Programmet nedenfor viser forskjellen mellom loops og listeforståelse basert på ytelse.

Python


java legge til i en matrise



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

>

>

Produksjon

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

Fra programmet ovenfor kan vi se listeforståelser er ganske raskere enn for loop.

Nestede listeforståelser

Nestede listeforståelser er ikke annet enn en listeforståelse innenfor en annen listeforståelse som er ganske lik nestet for loops. Nedenfor er programmet som implementerer nestet loop:

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

>

>

Produksjon

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

Nå ved å bruke nestede listeforståelser, kan den samme utgangen genereres i færre linjer med kode.

java streng cmp

Python




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

>

>

Produksjon

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

Listeforståelser og Lambda

Lambda-uttrykk er ingenting annet enn stenografirepresentasjoner av Python-funksjoner. Å bruke listeforståelser med lambda skaper en effektiv kombinasjon. La oss se på eksemplene nedenfor:

I dette eksemplet setter vi inn tall fra 10 til 50 i listen og skriver den ut.

Python




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

>

>

Produksjon

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

Her har vi brukt for loop for å skrive ut en tabell med 10.

Python




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

>

>

Produksjon

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

Nå her har vi bare brukt listeforståelse for å vise en tabell med 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)>

>

>

Produksjon

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

Til slutt bruker vi lambda + listeforståelse for å vise tabellen med 10. Denne kombinasjonen er svært nyttig for å få effektive løsninger på færre linjer med kode for komplekse problemer.

Betingelser i listeforståelse

Vi kan også legge til betingede utsagn til listeforståelsen. Vi kan lage en liste ved hjelp av område(), operatører , etc. og cal gjelder også noen betingelser for listen ved å bruke hvis uttalelse .

Viktige punkter

  • Forståelse av listen er et effektivt middel for å beskrive og konstruere lister basert på gjeldende lister.
  • Generelt er listeforståelse lett og enklere enn standard listeformingsfunksjoner og løkker.
  • Vi bør ikke skrive lange koder for listeforståelse for å sikre brukervennlig kode.
  • Hver forståelse av listen kan skrives om i for loop, men i sammenheng med listetolkning kan ikke hver for loop skrives om.

Nedenfor er noen eksempler som viser bruken av listeforståelser i stedet for den tradisjonelle tilnærmingen til å iterere gjennom iterable:

Python Listeforståelse ved å bruke If-else.

I eksemplet sjekker vi at fra 0 til 7 hvis tallet er partall, sett inn Partall til listen ellers sett inn Oddetall til listen.

Python




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

>

>

Produksjon

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

Nestet IF med listeforståelse

I dette eksemplet setter vi inn tall i listen som er et multiplum av 10 til 100, og skriver den ut.

Python




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

>

>

Produksjon

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

Vis et kvadrat med tall fra 1 til 10

I dette eksemplet setter vi inn en firkant fra 1 til 10 til listen og skriver ut listen.

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

>

>

Produksjon

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

Vis Transponering av 2D-matrise

I dette eksemplet lager vi en transponering av matrisen ved å bruke listeforståelse.

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

>

>

Produksjon

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

Veksle mellom store og små bokstaver for hvert tegn i en streng

I dette eksemplet bytter vi mellom store og små bokstaver for hvert tegn i en gitt streng ved å bruke XOR-operatoren med 32 og lagrer resultatet i en liste.

Python




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

>

javascript for loop

>

Produksjon

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

Snu hver streng i en Tuple

I dette eksemplet reverserer vi strenger for loop og setter dem inn i listen, og skriver ut listen.

Python




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

>

>

Produksjon

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

Opprette en liste over Tuples fra to separate lister

I dette eksemplet har vi laget to lister med navn og alder. Vi bruker glidelås() i listeforståelse og vi setter inn navn og alder som en tuppel til liste. Til slutt trykker vi listen over tupler.

Python




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

>

>

Produksjon:

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

Vis summen av sifre for alle oddeelementene i en liste.

I dette eksemplet har vi laget en liste og vi finner siffersummen av hvert oddetall i listen.

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

>

>

Produksjon

[16, 3, 18, 18]>

Fordeler med listeforståelse

  • Mer tids- og plasseffektivt enn loops.
  • Krever færre linjer med kode.
  • Transformerer iterativ utsagn til en formel.

Spørsmål om Python-listeforståelse

Nedenfor er to øvelsesspørsmål om Python-listeforståelse. Vi har dekket grunnleggende listeforståelseskode for å finne kuben med tall og kode for å finne lengden på et ord ved å bruke listeforståelse og len()-funksjonen.

Q1. Treningsspørsmål for kube med tall ved hjelp av listeforståelse

Python




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

>

>

Produksjon

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

Q2. Finne ordlengde øvelsesspørsmål ved hjelp av listeforståelse

Python




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

>

>

Produksjon

[5, 6, 6, 6]>