Så här använder du Python List Comprehensions (och när du inte använder dem)
Du kanske har hört talas om Pythons listaförståelse. Kanske är det även något du har använt utan att verkligen förstå. Nu är det dags att lära, eftersom vi täcker allt du behöver veta om listförståelse i Python.
Innan du börjar, är det värt att uppfriska dig själv om hur arrays och listor fungerar i Python. Hur Arrays och Lists arbetar i Python. Hur Arrays och Lists fungerar i Python Arrays och listor är några av de mest användbara datastrukturerna i programmering - även om få personer använder dem till sin fulla potential. Läs mer och hur man använder Python-ordböcker Python Dictionary: Hur du kan använda den för att skriva bättre kod Python Dictionary: Hur du kan använda den för att skriva bättre kod Tänk på en Python-ordbok som oordnade uppsättningar av nyckelvärdespar. I den här artikeln introducerar vi dig att arbeta med dem och använda dem för att förbättra din Python-kod. Läs mer .
Vad är Python List-förståelse?
Listförståelse låter komplicerat men det är det verkligen inte. I Python är det helt enkelt ett snabbt sätt att filtrera eller förfina en lista utifrån vissa kriterier.
Det sparar du måste skriva flera rader kod (speciellt om du redan har en loop), och det håller läsbarheten i din kod.
Var försiktig, men som listförståelse är inte alltid svaret. Det är lätt att få bäras och skriva komplexa förståelser som är svåra att läsa. Ibland är det mer bra att skriva mer kod, speciellt om det hjälper läsbarheten. Håll dig till enkla uppgifter och behåll koden till ett enda ansvar.
Så här använder du listaförståelser i Python
Notera: Dessa exempel använder alla Python 3.6. Om du inte är säker på skillnaderna mellan Python 3 och Python 2, se till att du läser våra Python FAQ De vanligaste frågorna om Python Programmering De vanligaste frågorna om Python Programmering I den här artikeln går vi igenom dig allt du behöver veta om Python som nybörjare. Läs mer, där vi täcker den här frågan och mer.
Tänk på den här biten av kod som kopierar en matris och vänder varje bokstav i den uppsättningen till en stor bokstav. Det gör det genom att loopa igenom varje objekt i arrayen:
bokstäver = ['a', 'b', 'c', 'd'] skriv ut (bokstäver) upper_letters = [] för bokstav i bokstäver: result = letter.upper () upper_letters.append (result) print (upper_letters)
Nu är här samma exakta logik, förutom gjort i en enda kodlinje med hjälp av en grundläggande Python-listaförståelse:
bokstäver = ['a', 'b', 'c', 'd'] skriv ut (bokstäver) upper_letters = [x.upper () för x i bokstäver] print (upper_letters)
Som du kan se är resultatet exakt detsamma, men processen innebär betydligt mer kod utan listförståelse.
Låt oss bryta det här enkla exemplet ner.
I det här exemplet skapas en lista som heter brev. Detta lagrar små bokstäver “en”, “b”, “c”, och “d”. Anta att du vill att alla dessa listelement ska vara stora? Tja, utan listförståelse måste du skapa en ny lista för att lagra resultatet (kallat upper_letters), loop över varje element i brev lista, konvertera varje bokstav (och lagra det i resultat-valfri men god praxis), och lägg sedan till versalen till den nya listan. Vad mycket arbete!
Listförståelsen här är nästan exakt lika med loopalternativet. Det säger effektivt “För varje bokstav i brevlistan konvertera du dem till stor bokstav och returnera resultatet som en ny lista.”
Listförståelse kan bara fungera på listor och måste returnera en ny lista. Låt oss gräva djupare.
Det finns tre delar till en listaförståelse (vi täcker den tredje delen nedan). Listförståelser måste starta och sluta med kvadratkonsoler ([ och ]). Så här utformades det, och låter Python veta att du ska arbeta med en lista.
Inne i torgets parentes måste du börja med resultatet. Det här är vad du vill göra med varje listelement.
I exemplet ovan konverterar följande kod varje element (refererad av variabelnamnet x) till övrigt genom att använda övre() metod som ingår i Python-kärnbiblioteket:
[x.upper () # kommer inte att springa, bara hälften av förståelsen vid denna punkt
Därefter måste du berätta för Python vilken lista som ska fungera, och tilldela varje enskilt element till en variabel. Detta är exakt samma som för loop i det långvariga exemplet:
för x i bokstäver
Varje gång slingan går över listan, värdet av x kommer att förändras till vad det nuvarande elementet är. Det kommer att börja som “en”, och då “b”, och så vidare.
Om du sätter allt ihop (och tilldela det till en variabel som heter upper_letters), kommer du att göra:
upper_letters = [x.upper () för x i bokstäver]
Nu, upper_letters kommer att innehålla en lista med stora bokstäver, börjar vid “en”, och då “B” och så vidare.
Den tredje delen av listförståelsen i Python
Som vi nämnde ovan finns det en tredje del för att lista förståelsen.
När du har gjort de två stegen ovan kan du inkludera ett valfritt villkor. Det här är som att använda en om uttalande att säga “gör mig en ny lista, baserat på den här gamla listan, men innehåller bara element som uppfyller mina kriterier”.
Så här ser det ut:
åldrar = [1, 34, 5, 7, 3, 57, 356] print (åldrar) old_ages = [x för x i åldrar om x> 10] print (old_ages)
I det här exemplet används en ny lista som heter åldrar. De old_ages listan sammanställs med hjälp av en listaförståelse. De om villkoret i slutet innebär att endast listelement som uppfyller kriterierna införs i den nya listan. I detta exempel är några åldrar större än tio tillåtna.
När du inte ska använda Python List Comprehensions
Listförståelse är fantastiskt när du har hängt på det, men det är inte användbart under alla omständigheter. Du ska nog inte använda den när du behöver mer än ett tillstånd:
old_ages = [x för x i åldrar om x> 10 och x < 100 and x is not None]
Koden fungerar, men det börjar bli lång och förvirrande. På samma sätt kanske allt annat än ett enkelt funktionssamtal inte fungerar. I det här exemplet får du ett fel:
bokstäver = ['a', 'b', 'c', 'd', 2] skriv ut (bokstäver) upper_letters = [x.upper () för x i bokstäver] skriv ut (upper_letters)
Detta är helt giltigt kod, men eftersom du inte kan uppge ett nummer kommer det inte att fungera. Detta är ett fall när den längre slingan faktiskt är att föredra, eftersom du kommer att kunna göra lite undantagshantering:
bokstäver = ['a', 'b', 'c', 'd', 1] skriv ut (bokstäver) upper_letters = [] för bokstav i bokstäver: försök: result = letter.upper () upper_letters.append AttributeError: pass # gör ingenting print (upper_letters)
Börja med att använda Python-listaförståelser att använda
Nu när du vet hur lätt listaförståelsen är i Python finns det ingen anledning att inte använda den. Kom bara ihåg att hålla det enkelt och överväga läsbarheten framför allt.
Kanske styr du en Arduino med Python Hur man programmerar och kontrollerar en Arduino med Python Hur man programmerar och kontrollerar en Arduino med Python Tyvärr är det omöjligt att direkt programmera en Arduino i Python, men du kan styra den via USB med en Python program. Här är hur. Läs mer, eller hur gör du med en DIY Python nätverkskamera? DIY Pan och Tilt Network Security Cam med Raspberry Pi DIY Pan och Tilt Network Security Cam med Raspberry Pi Lär dig hur man gör en fjärrkontrollbar pan-och tiltkamera med en Raspberry Pi. Projektet kan slutföras på morgonen med endast de enklaste delarna. Läs mer ?
Utforska mer om: Kodningstutorials, Python.