Sådan bruges Python-listeforståelser (og hvornår man ikke skal bruge dem)

  • Joseph Goodman
  • 0
  • 2802
  • 153
Reklame

Du har muligvis hørt om Pythons listeforståelse. Måske er det endda noget, du har brugt uden virkelig at forstå. Nu er det tid til at lære, da vi dækker alt hvad du har brug for at vide om listeforståelse i Python.

Før du går i gang, er det værd at opdatere dig selv, hvordan arrays og lister fungerer i Python. Hvordan Arrays og lister fungerer i Python. Hvordan Arrays og lister fungerer i Python Arrays og lister er nogle af de mest nyttige datastrukturer i programmering - selvom få mennesker bruger dem til deres fulde potentiale. og hvordan man bruger Python-ordbøger Python Dictionary: Hvordan du kan bruge det til at skrive bedre kode Python Dictionary: Hvordan du kan bruge det til at skrive bedre code Tænk på en Python-ordbog som uordnede sæt nøgleværdipar. I denne artikel introducerer vi dig til at arbejde med dem og bruge dem til at forbedre din Python-kode. .

Hvad er Python-listeforståelse?

Listeforståelse lyder kompleks, men det er det virkelig ikke. I Python er det simpelthen en hurtig måde at filtrere eller forfine en liste baseret på nogle kriterier.

Det sparer dig for at skulle skrive flere kodelinjer (især hvis du allerede er i en løkke), og det holder din kodes læsbarhed pæn.

Vær dog forsigtig, da listeforståelse ikke altid er svaret. Det er let at blive revet med og skrive komplekse forståelser, der er svære at læse. Undertiden er det at skrive mere kode bedre, især hvis det hjælper læsbarheden. Hold dig til enkle opgaver, og hold koden på et enkelt ansvar.

Sådan bruges listeforståelser i Python

Bemærk: Disse eksempler bruger alle Python 3.6. Hvis du ikke er sikker på forskellene mellem Python 3 og Python 2, skal du sørge for at læse vores Python FAQ De mest ofte stillede spørgsmål om Python-programmering De mest ofte stillede spørgsmål om Python-programmering I denne artikel leder vi dig gennem alt hvad du har brug for at vide om Python som nybegynder. , hvor vi dækker dette spørgsmål og mere.

Overvej denne bit kode, der kopierer en matrix og forvandler hvert bogstav i den array til en stor bogstav. Det gør det ved at sløjfe gennem hvert element i matrixen:

letters = ['a', 'b', 'c', 'd'] print (bogstaver) upper_letters = [] for bogstav med bogstaver: result = letter.upper () upper_letters.append (result) print (upper_letters)

Nu er her den samme nøjagtige logik, undtagen udført i en enkelt kodelinie ved hjælp af en grundlæggende forståelse af Python-listen:

letters = ['a', 'b', 'c', 'd'] print (bogstaver) upper_letters = [x.upper () for x in letters] print (upper_letters) 

Som du kan se, er resultatet nøjagtigt det samme, men processen involverer markant mere kode uden listeforståelse.

Lad os nedbryde dette enkle eksempel.

Dette eksempel opretter en kaldet liste breve. Dette gemmer små bogstaver “-en”, “b”, “c”, og “d”. Antager du, at alle disse listeelementer skal være store? Nå, uden listeforståelse, skal du oprette en ny liste for at gemme resultatet (kaldet upper_letters), loop over hvert element i breve liste, konverter hvert bogstav (og gem det i resultat-valgfri, men god praksis), og tilføj derefter det store bogstav til den nye liste. Hvad meget arbejde!

Listeforståelsen her svarer næsten nøjagtigt til loopalternativet. Det siger effektivt “for hvert bogstav på bogstavlisten skal du konvertere dem til store bogstaver og returnere resultatet som en ny liste.”

Listeforståelse kan kun arbejde på lister og skal returnere en ny liste. Lad os grave dybere.

Der er tre dele til en listeforståelse (vi dækker den tredje del nedenfor). Listeforståelser skal starte og slutte med firkantede parenteser ([ og ]). Sådan er det designet, og lader Python vide, at du arbejder med en liste.

Inde i de firkantede parenteser skal du starte med resultatet. Dette er, hvad du vil gøre med hvert listeelement.

I eksemplet ovenfor konverterer følgende kode hvert element (refereret til af variabelnavnet x) til store bogstaver ved hjælp af øverst() metode, som er en del af Python-kernebiblioteket:

[x.upper () # kører ikke, kun halvdelen af ​​forståelsen på dette tidspunkt

Derefter skal du fortælle Python, hvilken liste der skal arbejdes på, og tildele hvert enkelt element til en variabel. Dette er Nemlig det samme som for-loop i det langviklingede eksempel:

for x med bogstaver

Hver gang loopen går over listen, er værdien af x ændres til hvad det nuværende element er. Det starter som “-en”, og så “b”, og så videre.

Hvis du lægger det hele sammen (og tildeler det til en kaldet variabel upper_letters), er du færdig:

upper_letters = [x.upper () for x med bogstaver]

Nu, upper_letters vil indeholde en liste med store bogstaver, der starter ved “EN”, og så “B” og så videre.

Den tredje del af listeforståelsen i Python

Som vi nævnte ovenfor, er der en tredje del til listen forståelse.

Når du har udført de to trin ovenfor, kan du inkludere en valgfri betingelse. Dette er som at bruge en hvis erklæring at sige “Lav mig en ny liste, baseret på denne gamle liste, men inkluderer kun elementer, der opfylder mine kriterier”.

Sådan ser det ud:

aldre = [1, 34, 5, 7, 3, 57, 356] print (aldre) old_ages = [x for x i aldre, hvis x> 10] print (old_ages)

Dette eksempel bruger en ny liste kaldet aldre. Det old_ages listen samles ved hjælp af en listeforståelse. Det hvis betingelse til sidst betyder, at kun listeelementer, der opfylder kriterierne, indsættes i den nye liste. I dette eksempel er alle aldre over ti tilladte.

Hvornår man ikke skal bruge Python-listeforståelser

Listeforståelse er forbløffende, når du har fået fat på det, men det er ikke nyttigt i alle tilfælde. Du burde sandsynligvis ikke bruge det, når du har brug for mere end en betingelse:

old_ages = [x for x i aldre, hvis x> 10 og x < 100 and x is not None]

Denne kode fungerer, men den begynder at blive lang og forvirrende. Tilsvarende fungerer muligvis ikke andet end et enkelt funktionskald. I dette eksempel får du en fejl:

letters = ['a', 'b', 'c', 'd', 2] print (bogstaver) upper_letters = [x.upper () for x in letters] print (upper_letters)

Dette er perfekt gyldig kode, men da du ikke kan bogstaver et nummer, fungerer det ikke. Dette er et tilfælde, når den længere sløjfe faktisk er at foretrække, da du vil være i stand til at gøre nogle undtagelseshåndtering:

bogstaver = ['a', 'b', 'c', 'd', 1] print (bogstaver) upper_letters = [] for bogstav med bogstaver: try: result = letter.upper () upper_letters.append (result) undtagen AttributeError: pass # do not print (øvre_letters)

Begynd at sætte Python-listeforståelser, der skal bruges

Nu hvor du ved lige hvor let listeforståelse er i Python, er der ingen grund til ikke at bruge den. Bare husk at holde det enkelt og overveje læsbarheden frem for alt andet.

Måske vil du styre en Arduino med Python Sådan programmeres og styres en Arduino med Python Sådan programmeres og styres en Arduino med Python Desværre er det umuligt at direkte programmere en Arduino i Python, men du kan kontrollere det over USB ved hjælp af en Python program. Sådan gør du. , eller hvad med en DIY Python netværkssikkerhedskamera DIY Pan og Tilt Network Security Cam med Raspberry Pi DIY Pan og Tilt Network Security Cam med Raspberry Pi Lær, hvordan du laver eksternt synlig panorering og vip sikkerhedskamera med en Raspberry Pi. Dette projekt kan afsluttes om morgenen med kun de enkleste dele. ?




Endnu ingen kommentarer

Om moderne teknologi, enkel og overkommelig.
Din guide i en verden af moderne teknologi. Lær hvordan du bruger de teknologier og gadgets, der omgiver os hver dag, og lær, hvordan du finder interessante ting på Internettet.