1. ProgrammeringPythonHvordan definere og bruke Python-lister

Av Alan Shovic, John Shovic

Den enkleste datainnsamlingen i Python er en liste. En liste er en hvilken som helst liste over dataelementer, atskilt med komma, i firkantede parenteser. Vanligvis tilordner du et navn til Python-listen ved å bruke et =-tegn, akkurat som du ville gjort med variabler. Hvis listen inneholder tall, må du ikke bruke anførselstegn rundt seg. Her er for eksempel en liste over testresultater:

score = [88, 92, 78, 90, 98, 84]

Hvis listen inneholder strenger, bør disse strengene, som alltid, være omsluttet av enkle eller doble anførselstegn, som i dette eksemplet:

For å vise innholdet i en liste på skjermen, kan du skrive den ut akkurat som du vil skrive ut en vanlig variabel. Eksempelvis utfører du utskrift (studenter) i koden din etter å ha definert listen, viser dette på skjermen.

['Mark', 'Amber', 'Todd', 'Anita', 'Sandy']

Dette er kanskje ikke akkurat det du hadde i tankene. Men ikke bekymre deg, Python tilbyr mange gode måter å få tilgang til data på lister og vise det du vil.

Henvisning til Python-listen etter plassering

Hvert element i en liste har et posisjonsnummer, som begynner med null, selv om du ikke ser noen tall. Du kan henvise til ethvert element på listen etter nummeret ved å bruke navnet på listen etterfulgt av et tall i firkantede parenteser. Med andre ord, bruk denne syntaks:

listname [x]

Bytt ut listenavnet med navnet på listen du får tilgang til, og erstatt x med posisjonsnummeret på det objektet du ønsker. Husk at den første varen alltid er nummer null, ikke en. I den første linjen nedenfor definerer jeg for eksempel en liste som heter studenter, og skriver deretter ut varenummer null fra den listen. Resultatet, når du kjører koden, er at navnet Mark vises.
studenter = ["Mark", "Amber", "Todd", "Anita", "Sandy"]
print (studenter [0])
merke

Når du leser elementer i tilgangslisten, bruker fagpersoner ordet sub før nummeret. For eksempel vil studenter [0] bli snakket som studenter under null.

Dette neste eksempelet viser en liste med navn. Print () -funksjonen skriver ut posisjonsnummeret til den siste poengsummen i listen, som er 4 (fordi den første alltid er null).

score = [88, 92, 78, 90, 84]
print (score [4])
84

Hvis du prøver å få tilgang til et listeelement som ikke eksisterer, får du en "indeks utenfor rekkevidde" -feil. Indeksdelen er en referanse til tallet inne i de firkantede parentesene. For eksempel viser bildet nedenfor et lite eksperiment i en Jupyter-notisbok hvor det ble opprettet en liste over score og deretter ble utskriften av poengsummen [5] forsøkt.

Det mislyktes og genererte en feil fordi det ikke er noen score [5]. Det er bare score [0], score [1], score [2], score [3] og score [4] fordi tellingen alltid starter på null med den første på listen.

Python indeksområde

Looping gjennom en Python-liste

For å få tilgang til hvert element i en liste, bruk bare en for loop med denne syntaks:

for x i listen:

Bytt ut x med et variabelnavn du velger. Bytt ut listen med navnet på listen. En enkel måte å gjøre koden lesbar på er å alltid bruke et flertall for listenavnet (for eksempel studenter, score). Da kan du bruke entallnavn (student, poengsum) for variabelnavnet. Du trenger ikke å bruke abonnementsnumre (tall i firkantede parenteser) med denne tilnærmingen heller. Følgende kode skriver for eksempel ut hver poengsum i poenglisten:

for score i score:
print (score)

Husk å alltid innrykke koden som skal kjøres i løkken. Dette bildet viser et mer fullstendig eksempel der du kan se resultatet av å kjøre koden i en Jupyter-notisbok.

Looping gjennom en Python-liste

Se om en Python-liste inneholder et element

Hvis du vil at koden din skal sjekke innholdet i en liste for å se om den allerede inneholder noe element, kan du bruke i listenavn i en if-setning eller en variabel oppgave.

For eksempel lager koden på bildet under en liste over navn. Deretter lagrer to variabler resultatene av å søke i listen etter navnene Anita og Bob. Å skrive ut innholdet i hver variabel viser Sann for den der navnet (Anita) er i listen. Testen for å se om Bob er på listen viser seg å være usann.

Se om et element er i en Python-liste

Få lengden på en Python-liste

For å bestemme hvor mange elementer som er i en liste, bruk len () -funksjonen (kort for lengde). Legg navnet på listen inne i parentesene. For eksempel skriver du følgende kode inn i en Jupyter-notisbok eller Python-ledetekst eller hva:

studenter = ["Mark", "Amber", "Todd", "Anita", "Sandy"]
print (LEN (studenter))

Hvis du kjører denne koden, produseres denne utgangen:

5

Det er riktignok fem elementer på listen, selv om den siste alltid er en mindre enn antallet fordi Python begynner å telle på null. Så den siste, Sandy, viser faktisk til studenter [4] og ikke studenter [5].

Legger ved et element på slutten av en Python-liste

Når du vil at Python-koden skal legge til et nytt element på slutten av en liste, bruk metoden .append () med verdien du vil legge til i parentesene. Du kan bruke et variabelt navn eller en bokstavlig verdi i anførselstegnene.

For eksempel, i det følgende bildet legger linjen som leser studenter.append ("Goober") navnet Goober til listen. Linjen som leser students.append (new_student) legger til hvilket navn som er lagret i variabelen som heter new_student på listen. Metoden .append () legger alltid til på slutten av listen. Så når du skriver ut listen, ser du de to nye navnene på slutten.

Python vedleggsliste

Du kan bruke en test for å se om et element er i en liste, og deretter legge det til når elementet ikke allerede er der. For eksempel vil ikke koden nedenfor legge til navnet Amber i listen fordi navnet allerede er i listen:

student_name = "Amanda"

# Legg til studentnavn, men bare hvis ikke allerede i listen.
hvis studentnavn på studenter:
    skriv ut (studentnavn + "allerede på listen")
ellers:
    students.append (student_name)
    print (studentnavn + "lagt til listen")

Sette inn et element i en Python-liste

Selv om vedlegg () -metoden lar deg legge til et element på slutten av en liste, lar innsettingsmetoden () metoden deg legge til et element til listen i hvilken som helst posisjon. Syntaks for innsetting () er

listname.insert (posisjon, element)

Bytt ut listenavnet med navnet på listen, plassering med den posisjonen du vil sette inn elementet i (for eksempel 0 for å gjøre det til det første elementet, 1 for å gjøre det til det andre elementet, og så videre). Erstatt elementet med verdien, eller navnet på en variabel som inneholder verdien, som du vil legge inn i listen.

Følgende kode gjør for eksempel Lupe til det første elementet på listen:

# Lag en liste over strenger (navn).
studenter = ["Mark", "Amber", "Todd", "Anita", "Sandy"]

student_name = "Lupe"
# Legg studentnavn foran på listen.
students.insert (0, student_name)

# Vis meg den nye listen.
Print (studenter)

Hvis du kjører koden, vil print (studenter) vise listen etter at det nye navnet er satt inn, som følger:

['Lupe', 'Mark', 'Amber', 'Todd', 'Anita', 'Sandy']

Endre et element i en Python-liste

Du kan endre et element i en liste ved å bruke tildelingsoperatøren (sjekk ut disse vanlige Python-operatørene) akkurat som du gjør med variabler. Bare sørg for at du inkluderer indeksnummeret i firkantede parenteser av varen du vil endre. Syntaksen er:

listname [index] = NEWVALUE

Erstatt listenavn med navnet på listen; erstatte indeksen med abonnementet (indeksnummer) for elementet du vil endre; og erstatt newvalue med hva du vil legge inn i listeelementet. Ta for eksempel en titt på denne koden:

# Lag en liste over strenger (navn).
studenter = ["Mark", "Amber", "Todd", "Anita", "Sandy"]
studenter [3] = "Hobart"
Print (studenter)

Når du kjører denne koden, er utdataene som følger fordi Anitas navn er endret til Hobart.

['Mark', 'Amber', 'Todd', 'Hobart', 'Sandy']

Kombinere Python-lister

Hvis du har to lister som du vil kombinere til en enkelt liste, bruker du funksjonen utvide () med syntaks:

original_list.extend (additional_items_list)

I koden din erstatter du original_listen med navnet på listen du vil legge til nye listeelementer til. Erstatt addition_items_list med navnet på listen som inneholder elementene du vil legge til i den første listen. Her er et enkelt eksempel ved å bruke lister som heter liste1 og liste2. Etter at list1.extend (list2) er utført, inneholder den første listen elementene fra begge listene, som du kan se i utdataene fra utskriften () -uttalingen på slutten.

# Lag to lister med navn.
list1 = ["Zara", "Lupe", "Hong", "Alberto", "Jake"]
list2 = ["Huey", "Dewey", "Louie", "Nader", "Bubba"]

# Legg til liste2 navn til liste1.
list1.extend (list2)

# Skriv ut liste 1.
ut (list1)

['Zara', 'Lupe', 'Hong', 'Alberto', 'Jake', 'Huey', 'Dewey', 'Louie', 'Nader', 'Bubba']

Easy Parcheesi, nei?

Fjerne Python-listeelementer

Python tilbyr en remove () -metode, slik at du kan fjerne hvilken som helst verdi fra listen. Hvis varen er på listen flere ganger, blir bare den første forekomsten fjernet. For eksempel viser følgende kode en liste over bokstaver med bokstaven C gjentatt et par ganger. Deretter bruker koden letters.remove ("C") for å fjerne bokstaven C fra listen:

# Fjern "C" fra listen.
letters.remove ( "C")

# Vis meg den nye listen.
Print (bokstaver)

Når du faktisk kjører denne koden og deretter skriver ut listen, vil du se at bare den første bokstaven C er fjernet:

['A', 'B', 'D', 'C', 'E', 'C']

Hvis du trenger å fjerne alt et element, kan du bruke en stundsløyfe til å gjenta. Fjern så lenge elementet fremdeles står på listen. For eksempel gjentar denne koden. Fjern så lenge "C" fremdeles er på listen.

# Lag en liste over strenger.
bokstaver = ["A", "B", "C", "D", "C", "E", "C"]

Hvis du vil fjerne et element basert på dets plassering i listen, bruker du pop () med et indeksnummer i stedet for å fjerne () med en verdi. Hvis du vil fjerne det siste elementet fra listen, bruker du pop () uten indeksnummer.

For eksempel lager følgende kode en liste, en linje fjerner det første elementet (0), og en annen fjerner det siste elementet (pop () uten noe i parentesene). Når du skriver ut listen, vises de to elementene som er fjernet:

# Lag en liste over strenger.
bokstaver = ["A", "B", "C", "D", "E", "F", "G"]
 
# Fjern det første elementet.
letters.pop (0)
# Fjern det siste elementet.
letters.pop ()
 
# Vis meg den nye listen.
Print (bokstaver)

Å kjøre koden viser at det første og siste elementet dukket opp faktisk fungerte:

['B', 'C', 'D', 'E', 'F']

Når du spretter () et element fra listen, kan du lagre en kopi av den verdien i en eller annen variabel. For eksempel viser dette bildet den samme koden som ovenfor. Imidlertid lagrer det kopier av hva som er fjernet i variabler som ble kalt først fjernet og sist fjernet. På slutten skriver den ut Python-listen, og viser også hvilke bokstaver som ble fjernet.

fjerne elementer fra Python-listen

Python tilbyr også en del (forkortelse for sletting) -kommando som sletter ethvert element fra en liste basert på indeksnummer (posisjon). Men igjen, må du huske at den første varen er null. Så la oss si at du kjører følgende kode for å slette element nummer 2 fra listen:

# Lag en liste over strenger.
bokstaver = ["A", "B", "C", "D", "E", "F", "G"]
 
# Fjern element under 2.
del bokstaver [2]
 
Print (bokstaver)

Hvis du kjører den koden, vises listen på nytt som følger. Bokstaven C er slettet, som er det riktige elementet å slette fordi bokstavene er nummerert 0, 1, 2, 3, og så videre.

['A', 'B', 'D', 'E', 'F', 'G']

Du kan også bruke del til å slette en hel liste. Bare bruk ikke firkantede parenteser og indeksnummer. For eksempel lager koden du ser nedenfor en liste og sletter den. Forsøk på å skrive ut listen etter sletting forårsaker en feil, fordi listen ikke lenger eksisterer når utskrift () -satsen utføres.

Tømmer ut en Python-liste

Hvis du vil slette innholdet i en liste, men ikke selve listen, bruker du .clear (). Listen eksisterer fremdeles; den inneholder imidlertid ingen varer. Det er med andre ord en tom liste. Følgende kode viser hvordan du kan teste dette. Hvis du kjører koden, vises [] på slutten, som lar deg vite at listen er tom:

# Lag en liste over strenger.
bokstaver = ["A", "B", "C", "D", "E", "F", "G"]
 
# Tøm listen over alle oppføringer.
letters.clear ()
 
# Vis meg den nye listen.
Print (bokstaver)

[]

Teller hvor mange ganger et element vises i en Python-liste

Du kan bruke Python count () -metoden for å telle hvor mange ganger et element vises i en liste. Som med andre listemetoder, er syntaksen enkel:

listname.count (x)

Erstatt listenavn med navnet på listen din, og x med verdien du leter etter (eller navnet på en variabel som inneholder den verdien).

Koden på bildet nedenfor teller hvor mange ganger bokstaven B vises på listen, ved å bruke en bokstavelig B i parentesene til .count (). Den samme koden teller også antall C-karakterer, men den verdien ble lagret i en variabel bare for å vise forskjellen i syntaks. Begge teller fungerte, som du kan se i utgangen fra programmet nederst. En ble lagt til for å telle F-er, og ikke bruke noen variabler. F'ene ble talt rett i koden som viser meldingen. Det er ingen F-karakterer, så dette returnerer null, som du kan se i utgangen.

Når du prøver å kombinere tall og strenger for å danne en melding, må du huske at du må konvertere tallene til strenger ved å bruke funksjonen str (). Ellers får du en feil som leser noe som bare kan koble sammen str (ikke "int") til str. I den meldingen er int forkortelse for heltall, og str er forkortelse for streng.

Finne en Python-listeelementets indeks

Python tilbyr en .index () -metode som returnerer et tall som indikerer plasseringen, basert på indeksnummer, for et element i en liste. Syntaksen er:

listname.index (x)

Bytt ut som listen alltid med navnet på listen du vil søke etter. Bytt ut x hva du leter etter (enten som bokstavelig eller variabelt navn, som alltid). Selvfølgelig er det ingen garanti for at varen er på listen, og selv om den er det, er det ingen garanti for at varen bare er på listen. Hvis varen ikke er i listen, oppstår det en feil. Hvis varen er på listen flere ganger, returneres indeksen for det første samsvarende elementet.

Følgende bilde viser et eksempel der programmet krasjer på linjen f_index = grade.index (look_for) fordi det ikke er noen F i listen.

En enkel måte å komme seg rundt problemet på er å bruke en if-setning for å se om et element er i listen før du prøver å få indeksnummeret. Hvis varen ikke er i listen, kan du vise en melding som sier det. Ellers får du indeksnummeret og viser det i en melding. Denne koden er som følger:

# Lag en liste over strenger.
karakterer = ["C", "B", "A", "D", "C", "B", "C"]
# Bestem hva du skal se etter
look_for = "F"
# Se om varen er på listen.
hvis du ser_for i karakterer:
    # Hvis den er på listen, få og vis indeksen.
    print (str (look_for) + "er på indeksen" + str (grade.index (look_for)))
ellers:
    # Hvis ikke på listen, kan du ikke prøve indeksnummer.
    print (str (look_for) + "er ikke på listen.")

Alfabetisering og sortering av Python-lister

Python tilbyr en sorteringsmetode () for sorteringslister. I sin enkleste form alfabetiserer den elementene på listen (hvis de er strenger). Hvis listen inneholder tall, er de sortert som minste til største. For en enkel slags sånn, bruk bare sortering () med tomme parenteser:

listname.sort ()

Bytt ut listenavn med navnet på listen. Følgende bilde viser et eksempel med en liste over strenger og en liste over tall. I eksemplet ble det opprettet en ny liste for hver av dem ganske enkelt ved å tilordne hver sorterte liste til et nytt listenavn. Deretter skriver koden ut innholdet i hver sorterte liste.

Hvis listen inneholder strenger med en blanding av store og små bokstaver, og hvis resultatene av typen ikke ser bra ut, kan du prøve å erstatte .sort () med .sort (tast = lambda s: s.lower ()) og deretter kjører koden igjen.

Datoer er litt vanskeligere fordi du ikke bare kan skrive dem inn som strenger, for eksempel "12/31/2020". De må være datodatatypen for å kunne sortere riktig. Dette betyr å bruke datetime-modulen og dato () -metoden for å definere hver dato. Du kan legge datoene til listen slik du ville gjort for en annen liste. I den følgende linjen oppretter for eksempel koden en liste med fire datoer, og koden er helt fin.

datoer = [dt.date (2020,12,31), dt.date (2019,1,31), dt.date (2018,2,28), dt.date (2020,1,1)]

Datamaskinen bryr seg absolutt ikke om du oppretter listen på denne måten. Men hvis du ønsker å gjøre koden mer lesbar for deg selv eller andre utviklere, kan det være lurt å opprette og legge til hver dato, en om gangen, så bare så det er litt lettere å se hva som skjer og slik at du ikke har å takle så mange kommaer i en kodelinje. Bildet nedenfor viser et eksempel der en tom liste med dataliste ble opprettet:

dateliste = []

Deretter ble en dato om gangen lagt til listen ved å bruke syntaks dt.date (år, måned, dag).

Etter at listen er opprettet, bruker koden datelist.sort () for å sortere dem i kronologisk rekkefølge (tidligst til sist). Du trenger ikke å bruke utskrift (dataliste) i den koden fordi den metoden viser datoene med informasjonen om datatypen inkludert, slik:

[datetime.date (2018, 2, 28), datetime.date (2019, 1, 31), datetime.date (2020, 1, 1), datetime.date (2020, 12, 31)]

Ikke den enkleste listen å lese. Så i stedet for å skrive ut hele listen med ett utsagn (), kan du gå gjennom hver dato i listen og skrive ut hver formatert med f-strengen% m /% d /% Y. Dette viser hver dato på sin egen linje i mm / dd / åååå

Hvis du vil sortere elementer i omvendt rekkefølge, legger du omvendt = Sann i sortering () -parentesene (og ikke glem å opprette den første bokstaven) Bildet under viser eksempler på sortering av alle tre listene i synkende (omvendt) rekkefølge ved bruk av omvendt = Sann.

Reversering av en Python-liste

Du kan også reversere rekkefølgen på elementer i en liste ved å bruke .reverse-metoden. Dette er ikke det samme som å sortere i revers, fordi når du sorterer i revers, sorterer du fortsatt: Z – A for strenger, størst til minste for tall, sist til tidligst for datoer. Når du reverserer en liste, reverserer du ganske enkelt elementene i listen, uansett rekkefølge, uten å prøve å sortere dem på noen måte.

Følgende kode viser et eksempel der du reverserer rekkefølgen på navnene i listen og deretter skriver ut listen. Utgangen viser listeelementene som er reversert fra sin opprinnelige rekkefølge:

# Lag en liste over strenger.
names = ["Zara", "Lupe", "Hong", "Alberto", "Jake"]
# Reverse listen
names.reverse ()
# Skriv ut listen
Print (navn)
 
['Jake', 'Alberto', 'Hong', 'Lupe', 'Zara']

Kopiering av en Python-liste

Hvis du noen gang trenger å jobbe med en kopi av en liste, bruk metoden .copy () for ikke å endre den opprinnelige listen. For eksempel ligner følgende kode den foregående koden, bortsett fra at i stedet for å reversere rekkefølgen på den opprinnelige listen, lager du en kopi av listen og reverserer den. Å skrive ut innholdet i hver liste viser hvordan den første listen fremdeles er i den opprinnelige rekkefølgen, mens den andre er omgjort:

# Lag en liste over strenger.
names = ["Zara", "Lupe", "Hong", "Alberto", "Jake"]
 
# Lag en kopi av listen
backward_names = names.copy ()
# Reverse kopien
backward_names.reverse ()
 
# Skriv ut listen
Print (navn)
Print (backward_names)
 
['Zara', 'Lupe', 'Hong', 'Alberto', 'Jake']
['Jake', 'Alberto', 'Hong', 'Lupe', 'Zara']

For fremtidige referanser oppsummerer følgende tabell metodene du har lært om.