Programmering

Hvordan jobbe med Python-datatypen

Python kommer med en samling av innebygde datatyper som gjør vanlige datakampoperasjoner enkle. Blant dem erliste, en enkel, men allsidig samlingstype. Med en Python-liste kan du gruppere Python-objekter sammen i en endimensjonal rad som lar objekter nås etter posisjon, legges til, fjernes, sorteres og deles inn.

Grunnleggende om Python-listen

Å definere en liste i Python er enkelt - bare bruk braketsyntaks for å indikere elementer i en liste.

list_of_ints = [1, 2, 3]

Elementer i en liste trenger heller ikke å være av samme type. De kan være et hvilket som helst Python-objekt. (Her, antaTre er en funksjon.)

list_of_objects = ["One", TWO, Three, {"Four": 4}, None]

Merk at å ha blandede objekter i en liste kan ha implikasjoner for å sortere listen. Vi skal gå inn på dette senere.

Den største grunnen til å bruke en liste er å kunne finne objekter etter deres posisjon i listen. For å gjøre dette bruker du Pythons indeksnotasjon: et tall i parentes, som starter på 0, som indikerer posisjonen til elementet i listen.

For eksemplet ovenfor, liste_ av_trykk [0] gir 1. liste_ av_trykk [1] gir 2. liste_ av_objekter [4] ville være denIngen gjenstand.

Indeksering av Python-liste

Hvis du bruker et positivt heltall for indeksen, indikerer heltallet posisjonen til varen du skal se etter. Men hvis du bruker ennegativ heltall, så indikerer heltallet posisjonen som starter fraslutt av listen. For eksempel ved å bruke en indeks på -1 er en praktisk måte å hente det siste elementet fra en liste uansett størrelsen på listen.

liste_ av_trykk [-1] gir3liste_ av_objekter [-1] girIngen.

Du kan også bruke et heltallvariabel som indeks. Hvisx = 0liste_ av_trykk [x] gir 1, og så videre.

Legge til og fjerne Python-listeelementer

Python har flere måter du kan legge til eller fjerne elementer fra en liste.

  • .append () setter inn et element påslutt av listen. For eksempel, list_of_ints.append (4) ville snuliste_av_int inn på listen[1,2,3,4]. Tilleggene er raske og effektive; det tar omtrent like lang tid å legge til ett element i en liste, uansett hvor lang listen er.
  • .pop () fjerner og returnerer det siste elementet fra listen. Hvis vi løpx = list_of_ints.pop () på originalenliste_av_int, x vil inneholde verdien3. (Du trenger ikke å tildele resultatene av.pop () til en verdi, men hvis du ikke trenger det.).pop ()operasjonene er også raske og effektive.
  • .sett inn() setter inn et element på en vilkårlig plassering i listen. For eksempel,list_of_ints.insert (0,10) ville snuliste_av_int inn i [10,1,2,3]. Vær oppmerksom på at jo nærmere du setter inn foran på listen, desto tregere vil denne operasjonen være, selv om du ikke vil se mye av en avmatning med mindre listen din har mange tusen elementer eller du gjør innsatsene i en tett løkke.
  • .pop (x) fjerner elementet i indeksenx. Sålist_of_ints.pop (0) fjerner elementet ved indeks 0. Jo nærmere du er foran listen, jo tregere kan denne operasjonen være.
  • .fjerne gjenstand) fjerner et element fra en liste, menikke basert på indeksen. Heller, .fjerne() fjernerførste forekomst av objektet du spesifiserer, og søker fra toppen av listen og nedover. Til[3,7,7,9,8]. Fjern (7), den første7 fjernes, noe som resulterer i listen[3,7,9,8]. Denne operasjonen kan også avta for en stor liste, siden den teoretisk sett må krysse hele listen for å fungere.

Slicing en Python-liste

Lister kan deles opp i nye lister, en prosess som kallesskjæring. Pythons snittsyntaks lar deg spesifisere hvilken del av en liste du skal hugge av, og hvordan du kan manipulere den utskårne delen.

Du så ovenfor hvordan du bruker brakettnotasjonen for å få et enkelt element fra en liste: min_liste [2], for eksempel. Skiver bruker en variant av samme indeksnotasjon (og følger de samme indekseringsreglene): list_object [start: stop: step].

  • start er posisjonen i listen for å starte stykket.
  • Stoppe er posisjonen i listen der vi slutter å kutte. Med andre ord,den stillingen og alt etter den er utelatt.
  • steg er en valgfri "hvert nth element" -indikator for stykket. Som standard er dette1, slik at stykket beholder hvert element fra listen det skjæres fra. Sett steg til2, og du velger hvert andre element, og så videre.

Her er noen eksempler. Vurder denne listen:

slice_list = [1,2,3,4,5,6,7,8,9,0]

slice_list [0: 5] = [1, 2, 3, 4, 5]

(Merk at vi stopper ved indeks 4, ikke indeks 5!)

slice_list [0: 5: 2] = [1, 3, 5]

Hvis du utelater en bestemt skiveindeks, antar Python en standard. Slipp av startindeksen, og Python antar starten på listen:

slice_list [: 5] = [1, 2, 3, 4, 5]

Slipp av stoppindeksen, og Python antar slutten på listen:

slice_list [4:] = [5, 6, 7, 8, 9, 0]

Desteg element kan også værenegativ. Dette lar oss ta skiver som er omvendte kopier av originalen:

slice_list [:: - 1] = [0, 9, 8, 7, 6, 5, 4, 3, 2, 1]

Vær oppmerksom på at du kan skjære i omvendt retning ved å bruke start- og stoppindekser som går bakover, ikke fremover:

slice_list [5: 2: -1] = [6, 5, 4]

Husk også at lister erkopier av den opprinnelige listen. Den opprinnelige listen forblir uendret.

[Også på: De beste gratis datavitenskapskursene under karantene]

Sortering av en Python-liste

Python tilbyr to måter å sortere lister på: Du kan generere en ny, sortert liste fra den gamle, eller du kan sortere en eksisterende liste på stedet. Disse alternativene har ulik oppførsel og forskjellige bruksscenarier.

For å opprette en ny, sortert liste, bruksortert () funksjon på den gamle listen:

new_list = sortert (old_list)

Dette vil sortere innholdet på listen ved hjelp av Pythons standard sorteringsmetoder. For strenger er standard alfabetisk rekkefølge; for tall er det stigende verdier. Merk at innholdet i listen må være konsistent for at dette skal fungere. For eksempel kan du ikke sortere en blanding av heltall og strenger, men du kan sortere en liste som er alle heltall eller alle strenger. Ellers får du enType Feil i sorteringsoperasjonen.

Hvis du vil sortere en liste i omvendt retning, sender duomvendt parameter:

new_list = sortert (old_list, reverse = True)

Den andre måten å sortere på,på plass sortering, utfører sorteringsoperasjonen direkte på den opprinnelige listen. For å gjøre dette, bruk listen.sortere()metode:

old_list.sort ()

.sortere() tar ogsåomvendt som parameter, slik at du kan sortere i omvendt retning.

Bådesortert () og.sortere() også ta ennøkkel parameter. De nøkkel parameter lar deg gi en funksjon som kan brukes til å utføre en tilpasset sorteringsoperasjon. Når listen er sortert, blir hvert element sendt tilnøkkel funksjon, og den resulterende verdien brukes til sortering. For eksempel, hvis vi hadde en blanding av heltall og strenger, og vi ønsket å sortere dem, kunne vi brukenøkkel som dette:

mixed_list = [1, "2", 3, "4", None] def sort_mixed (item): try: return int (item) unntatt: return 0 sorted_list = sorted (mixed_list, key = sort_mixed) print (sorted_list)

Merk at denne koden ikke ville gjort detkonvertere hvert element i listen til et helt tall! Snarere ville det bruke heltalletverdi av hvert element som sin sorteringsverdi. Legg også merke til hvordan vi bruker enprøv / unntatt blokkere for å fange opp verdier som ikke oversettes rent til et heltall, og returnere0 for dem som standard.

Python-lister er ikke matriser

En viktig ting å vite om lister i Python er at de ikke er "arrays". Andre språk, som C, har endimensjonale eller flerdimensjonale konstruksjoner kalt matriser som aksepterer verdier av en enkelt type. Lister er heterogene; de kan godta gjenstander av hvilken som helst type.

Hva mer, derer et egetarray skriv inn Python. Python array er designet for å etterligne oppførselen til en matrise i C, og det er hovedsakelig ment å la Python jobbe med C-matriser. Dearray type er nyttig i de tilfellene, men i nesten alle pure-Python-tilfeller vil du bruke lister.

Når skal du bruke Python-lister (og når ikke)

Så når er Python-lister mest nyttige? En liste er best når:

  • Du må finne ting raskt etter deresposisjon i en samling. Å få tilgang til en hvilken som helst posisjon i en liste tar like lang tid, så det er ingen ytelsesstraff for å slå opp selv det millionste elementet i en liste.
  • Du legger til og fjerner i samlingen hovedsakelig ved å legge til slutten eller fjerne fra slutten, på samme måte som en bunke. Igjen tar disse operasjonene like lang tid uavhengig av lengden på listen.

En Python-liste er mindre egnet når:

  • Du vil finne et element i en liste, men du vet ikke posisjonen. Dukan gjør dette med.index () eiendom. For eksempel kan du brukelist_of_ints.index (1) for å finne indeksen for den første forekomsten av nummeret1 iliste_av_int. Hastighet bør ikke være et problem hvis listen din bare er noen få elementer lang, men for lister tusenvis av elementer, betyr det at Python må søke i hele listen. For et scenario som dette, bruk en ordbok der hvert element kan bli funnet ved hjelp av en nøkkel, og hvor oppsøkelsestiden vil være den samme for hver verdi.
  • Du vil legge til eller fjerne gjenstander fra hvilken som helst posisjon bortsett fra slutten. Hver gang du gjør dette, må Python bevege segannenhver gjenstand etterelementet som er lagt til eller fjernet. Jo lenger listen er, desto større blir ytelsesproblemet. Python’sdeque objektet passer bedre hvis du vil legge til eller fjerne objekter fritt fra starten eller slutten av listen.

Hvordan gjøre mer med Python

  • Hvordan pakke Python-apper med BeeWare koffert
  • Hvordan kjøre Anaconda side om side med andre pythoner
  • Hvordan bruke Python dataklasser
  • Kom i gang med asynkronisering i Python
  • Hvordan bruke asyncio i Python
  • 3 trinn til en Python async-overhaling
  • Hvordan bruke PyInstaller for å lage Python-kjørbare filer
  • Cython tutorial: Hvordan øke hastigheten på Python
  • Slik installerer du Python på den smarte måten
  • Hvordan håndtere Python-prosjekter med poesi
  • Hvordan administrere Python-prosjekter med Pipenv
  • Virtualenv og venv: Python virtuelle miljøer forklart
  • Python virtualenv og venv do’s and don'ts
  • Python-tråder og underprosesser forklart
  • Hvordan bruke Python-feilsøkingsprogrammet
  • Hvordan bruke timeit til å profilere Python-kode
  • Hvordan bruke cProfile for å profilere Python-kode
  • Slik konverterer du Python til JavaScript (og tilbake igjen)
$config[zx-auto] not found$config[zx-overlay] not found