Slik bruker du Python List Comprehensions (og når du ikke bruker dem)
Du har kanskje hørt om Pythons listeforståelse. Kanskje det er enda noe du har brukt uten å forstå. Nå er det på tide å lære, da vi dekker alt du trenger å vite om listeforståelse i Python.
Før du begynner, er det verdt å forfriske deg selv hvordan arrays og lister fungerer i Python. Hvordan Arrays and Lists Arbeid i Python. Hvordan Arrays and Lists Arter i Python Arrays og lister er noen av de mest nyttige datastrukturene i programmering. Selv om få personer bruker dem til deres fulle potensial. Les mer og hvordan du bruker Python-ordbøker Python Dictionary: Hvordan du kan bruke den til å skrive bedre kode Python Dictionary: Hvordan du kan bruke den til å skrive bedre kode Tenk på en Python-ordbok som uordnede sett med nøkkelverdige par. I denne artikkelen presenterer vi deg for å jobbe med dem og bruke dem til å forbedre Python-koden. Les mer .
Hva er Python Liste forståelse?
Listeforståelse lyder komplekst, men det er egentlig ikke det. I Python er det rett og slett en rask måte å filtrere eller forfine en liste basert på noen kriterier.
Det sparer deg for å skrive flere kodelinjer (spesielt hvis du allerede er i en loop), og det holder lesbarheten til koden din nydelig.
Vær imidlertid forsiktig, da listeforståelse ikke alltid er svaret. Det er lett å bli borte og skrive komplekse forståelser som er tøffe å lese. Noen ganger kan du skrive mer kode, spesielt hvis det hjelper lesbarhet. Hold deg til enkle oppgaver, og hold koden til et enkelt ansvar.
Slik bruker du listeforståelser i Python
Merk: Disse eksemplene bruker alle Python 3.6. Hvis du ikke er sikker på forskjellene mellom Python 3 og Python 2, så sørg for at du leser våre Python FAQ De vanligste spørsmålene om Python Programmering De vanligste spørsmålene om Python Programmering I denne artikkelen vil vi gå deg gjennom alt du trenger å vite om Python som nybegynner. Les mer, hvor vi dekker dette spørsmålet og mer.
Vurder denne koden som kopierer en matrise og gjør hvert bokstav i det aktuelle feltet til en stor bokstav. Det gjør det ved å løpe gjennom hvert element i gruppen:
bokstaver = ['a', 'b', 'c', 'd'] skriv ut (bokstaver) upper_letters = [] for brev i bokstaver: result = letter.upper () upper_letters.append (result) print (upper_letters)
Nå er det samme eksakte logikk, bortsett fra gjort i en enkelt linje med kode ved hjelp av en grunnleggende Python-liste forståelse:
bokstaver = ['a', 'b', 'c', 'd'] skriv ut (bokstaver) upper_letters = [x.upper () for x i bokstaver] print (upper_letters)
Som du kan se, er resultatet akkurat det samme, men prosessen innebærer betydelig mer kode uten listeforståelse.
La oss bryte dette enkle eksempelet ned.
Dette eksempelet oppretter en liste som heter bokstaver. Dette lagrer små bokstaver “en”, “b”, “c”, og “d”. Anser du at alle disse listelementene skal være store? Vel, uten listforståelse må du opprette en ny liste for å lagre resultatet (kalt upper_letters), loop over hvert element i bokstaver liste, konverter hvert brevet (og lagre det i resultat-valgfritt, men god praksis), og legg deretter stor bokstav til den nye listen. Hva mye arbeid!
Listen forståelse her er nesten akkurat lik loop alternativet. Det sier faktisk “For hvert brev i brevlisten konverterer du dem til store versjoner, og returnerer resultatet som en ny liste.”
Listeforståelse kan bare fungere på lister, og må returnere en ny liste. La oss grave dypere.
Det er tre deler til en listeforståelse (vi skal dekke den tredje delen nedenfor). Listeforståelser må starte og slutte med firkantede parenteser ([ og ]). Dette er hvordan det ble designet, og lar Python vite at du skal jobbe med en liste.
Inne i firkantede parenteser må du starte med resultatet. Dette er hva du vil gjøre med hvert listelement.
I eksemplet ovenfor konverterer følgende kode hvert element (referert til av variabelenavnet x) til store bokstaver ved å bruke øverste() metode, som er en del av Python kjernebiblioteket:
[x.upper () # vil ikke løpe, bare halvparten av forståelsen på dette punktet
Deretter må du fortelle Python hvilken liste som skal brukes, og tilordne hvert enkelt element til en variabel. Dette er nøyaktig det samme som for løkken i det lange vindte eksempelet:
for x i bokstaver
Hver gang sløyfen går over listen, verdien av x vil forandre seg til det aktuelle elementet er. Det vil begynne som “en”, og så “b”, og så videre.
Hvis du legger alt sammen (og tilordne det til en variabel som heter upper_letters), vil du bli ferdig:
upper_letters = [x.upper () for x i bokstaver]
Nå, upper_letters vil inneholde en liste med store bokstaver, som begynner på “EN”, og så “B” og så videre.
Den tredje delen av listevalueringen i Python
Som nevnt ovenfor er det en tredje del å liste forståelse.
Når du har gjort de to trinnene over, kan du inkludere en valgfri tilstand. Dette er som å bruke en hvis uttalelse å si “gi meg en ny liste, basert på denne gamle listen, men bare med elementer som oppfyller kriteriene mine”.
Slik ser det ut:
aldre = [1, 34, 5, 7, 3, 57, 356] print (aldre) old_ages = [x for x i aldre hvis x> 10] print (old_ages)
Dette eksemplet bruker en ny liste som heter aldre. De old_ages listen er samlet ved hjelp av en listeforståelse. De hvis tilstand på slutten betyr at kun listelementer som oppfyller kriteriene, settes inn i den nye listen. I dette eksemplet er noen aldre større enn ti tillatt.
Når du ikke skal bruke Python List Comprehensions
Liste forståelse er fantastisk når du har hengt på det, men det er ikke nyttig i alle situasjoner. Du bør nok ikke bruke den når du trenger mer enn én tilstand:
old_ages = [x for x i aldre hvis x> 10 og x < 100 and x is not None]
Denne koden fungerer, men det begynner å bli lang og forvirrende. På samme måte kan alt annet enn en enkel funksjonsanrop ikke fungere. I dette eksemplet får du en feil:
bokstaver = ['a', 'b', 'c', 'd', 2] skriv ut (bokstaver) upper_letters = [x.upper () for x i bokstaver] print (upper_letters)
Dette er helt gyldig kode, men som du ikke kan oppgi et nummer, vil det ikke fungere. Dette er et tilfelle når den lengre sløyfen egentlig er å foretrekke, da du vil kunne gjøre noe unntakshåndtering:
bokstaver = ['a', 'b', 'c', 'd', 1] skriv ut (bokstaver) upper_letters = [] for brev i bokstaver: prøv: resultat = letter.upper () upper_letters.append AttributeError: pass # gjør ingenting print (upper_letters)
Begynn å sette Python-listeforståelser til bruk
Nå som du vet hvor lett forståelsen er i Python, er det ingen grunn til ikke å bruke det. Bare husk å holde det enkelt, og vurder lesbarheten fremfor alt annet.
Kanskje du vil kontrollere en Arduino med Python. Slik programmerer og styrer du en Arduino med Python. Slik programmerer og styrer du en Arduino med Python. Dessverre er det umulig å programmere en Arduino i Python direkte, men du kan styre den over USB ved hjelp av en Python program. Dette er hvordan. Les mer, eller hva med en DIY Python nettverkssikkerhetskamera DIY Pan og Tilt Network Security Cam med Raspberry Pi DIY Pan og Tilt Network Security Cam med Raspberry Pi Lær hvordan du gjør fjernsyns pan og tilt sikkerhet kamera med en Raspberry Pi. Dette prosjektet kan fullføres om morgenen med bare de enkleste delene. Les mer ?
Utforsk mer om: Kodingstutorials, Python.