Python

Listeforståelser i Python

Listeforståelser i Python
Listeforståelse bruges ofte i Python til at skrive udsagn med en enkelt linje, der opretter en ny liste eller ordbog ved at løbe over et iterabelt objekt. Denne artikel vil forklare, hvordan man bruger listeforståelser i Python, begyndende med en grundlæggende forklaring på, hvordan sløjfer fungerer i Python.

For Loop in Python

En for loop-sætning i Python gentages sekventielt over medlemmer af ethvert objekt, liste, streng osv. Sammenlignet med andre programmeringssprog er dens syntaks meget renere og kræver ikke manuel definition af iterationstrin og start af iteration. Selvom der er måder at gøre dens adfærd den samme som andre programmeringssprog (vil ikke blive dækket af denne artikel). Du kan også udøve en vis kontrol over sløjfer ved at bruge udsagn som fortsæt, pause, bestå osv. Nedenfor er et simpelt eksempel på for loop i Python:

for x inden for rækkevidde (10):
udskrive (x)

For-sløjfen ovenfor udskriver ti tal, der starter fra 0 og slutter ved 9.

Listeforståelser

Listeforståelse er intet andet end en stenografi / kortfattet måde at skrive multi-line til sløjfer i en one-liner-erklæring. Eksemplet på listeforståelse herunder opretter en ny liste som [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] ved at inkludere alle værdier af “x” i den.

tal = [x for x inden for rækkevidde (10)]
print (tal)

Bemærk, at listeforståelse altid opretter en ny liste og ikke ændrer originale iterables, der bruges i udtrykket. Et typisk udtryk for listeforståelse skal have en "for" -klausul og kan efterfølges af "hvis" og "ellers" betingede udsagn. Uden at bruge en listeforståelse vil eksemplet ovenfor blive skrevet på følgende måde:

tal = []
for x inden for rækkevidde (10):
numre.tilføj (x)
print (tal)

Ydeevne og læsbarhed

Listeforståelser er hurtigere end for sløjfer. Medmindre du gentager hundreder af tusinder af emner, vil du dog ikke mærke større præstationsforbedringer. Mens listeforståelse giver en kortfattet måde at skrive til sløjfer på, kan komplekse udtryk føre til dårlig læsbarhed af kode og øget bredhed. Det er vigtigt at holde koden læselig, medmindre det er en absolut nødvendighed for dit program at opnå maksimal ydelse.

Eksempel: Brug af listeforståelsessyntaks med ordbøger og sæt

En pythonordbog er en samling af elementer defineret i nøgleværdipar, mens et sæt er en samling af unikke værdier, hvor duplikater ikke er tilladt. Listeforståelser kan også bruges med Python-ordbøger og sæt. Syntaksen adskiller sig lidt, i stedet for at indpakke udtrykket i firkantede seler, skal du nu bruge krøllede seler. Du får også en ny ordbog / et sæt objekt i stedet for en ny liste.

data = "city": "new york", "name": "john doe"
formatted_data = k: v.titel () for k, v i data.varer ()
udskriv (formatted_data)

Eksemplet ovenfor vil konvertere strengværdier til titelskift og oprette en ny ordbog kaldet “formatted_data”, hvis output vil være: 'city': 'New York', 'name': 'John Doe'. Du kan også ændre ordbogen / indstillingen på stedet ved at angive den eksisterende ordbogsvariabel på venstre side.

data = "city": "new york", "name": "john doe"
data = k: v.titel () for k, v i data.varer ()
udskrive (data)

Uden at bruge ordbogens forståelse ville koden se sådan ud:

data = "city": "new york", "name": "john doe"
formatted_data =
for k, v i data.varer ():
formatted_data [k] = v.titel()
udskriv (formatted_data)

Da der ikke er nogen nøgleværdipar i sæt, kan en sætforståelse defineres på samme måde som en listeforståelse. Den eneste forskel er brugen af ​​krøllede seler.

Eksempel: Flere for sløjfer i en listeforståelse

Listeforståelseseksemplet, der er nævnt ovenfor, er grundlæggende og bruger en enkelt “for” -sætning. Nedenfor er et eksempel, der bruger flere til sløjfer og en betinget "if" -erklæring.

adjektiver = ["Disco", "Eoan", "Focal", "Artful"]
dyr = ["Dingo", "Ermine", "Fossa", "Beaver"]
kodenavne = [x + "" + y for x i adjektiver for y hos dyr, hvis y.starter med (x [0])]
print (kodenavne)

Koden viser ['Disco Dingo', 'Eoan Ermine', 'Focal Fossa'] som output. De to for sløjfer går over "adjektiver" og "dyr" -lister, og deres medlemmer sammenføjes ved hjælp af et mellemrum, kun hvis det første bogstav i begge ord er det samme. Uden at bruge listeforståelser ville koden se sådan ud:

adjektiver = ["Disco", "Eoan", "Focal", "Artful"]
dyr = ["Dingo", "Ermine", "Fossa", "Beaver"]
kodenavne = []
for x i adjektiver:
for y hos dyr:
hvis y.starter med (x [0]):
kodenavne.tilføj (x + "" + y)
print (kodenavne)

Eksempel: Listeforståelse med if-else-klausul

Eksemplet nedenfor viser brugen af ​​if og ellers udsagn i listeforståelser.

number_list = [1, 2, 3, 4]
another_list = [5, 6, 7, 8]
resultat = [Sand hvis (x + y)% 2 == 0 andet Falsk for x i nummerliste for y i en anden_liste]
print (resultat)

Mens du løber gennem to lister, kontrollerer listeforståelsen ovenfor, om summen af ​​parret af elementer er jævn eller ikke. At køre ovenstående kode viser dig [Sand, Falsk, Sand, Falsk, Falsk, Sand, Falsk, Sand, Sand, Falsk, Sand, Falsk, Falsk, Sand, Falsk, Sand] som output. Uden at bruge listeforståelse ville koden se sådan ud:

number_list = [1, 2, 3, 4]
another_list = [5, 6, 7, 8]
resultat = []
for x i nummerliste:
for y i en anden_liste:
hvis (x + y)% 2 == 0:
resultat.tilføj (sandt)
andet:
resultat.tilføj (Falsk)
print (resultat)

Konklusion

Listeforståelser giver en god måde at skrive rene og koncise loop-udsagn på. De kan dog hurtigt blive komplekse og vanskelige at forstå, hvis der anvendes flere sløjfer og betingede udsagn. I sidste ende kommer det til komfortniveauet hos en programmør, men generelt er det en god ide at skrive eksplicit, læsbar og let at debugge kode i stedet for overdrevent at bruge stenografi.

Installer det nyeste OpenRA-strategispil på Ubuntu Linux
OpenRA er en Libre / Free Real Time Strategy-spilmotor, der genskaber de tidlige Westwood-spil som det klassiske Command & Conquer: Red Alert. Distrib...
Installer nyeste Dolphin Emulator til Gamecube & Wii på Linux
Dolphin Emulator giver dig mulighed for at spille dine valgte Gamecube & Wii-spil på Linux Personal Computers (PC). Som en frit tilgængelig og open s...
Sådan bruges GameConqueror Cheat Engine i Linux
Artiklen dækker en vejledning om brug af GameConqueror-snydemotoren i Linux. Mange brugere, der spiller spil på Windows, bruger ofte "Cheat Engine" -a...