Programmering

Sådan arbejder du med Python-datatypen

Python leveres med en samling af indbyggede datatyper, der gør almindelige datakæmpende operationer lette. Blandt dem erliste, en enkel men alsidig samlingstype. Med en Python-liste kan du gruppere Python-objekter sammen i en endimensionel række, der giver adgang til objekter efter position, tilføjet, fjernet, sorteret og opdelt.

Grundlæggende om Python-listen

Det er let at definere en liste i Python - brug bare parentes-syntaksen til at angive elementer på en liste.

list_of_ints = [1, 2, 3]

Elementer på en liste behøver heller ikke alle at være af samme type. De kan være ethvert Python-objekt. (Her antager duTre er en funktion.)

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

Bemærk, at det at have blandede objekter på en liste kan have konsekvenser for at sortere listen. Vi går ind på dette senere.

Den største grund til at bruge en liste er at kunne finde objekter efter deres position på listen. For at gøre dette bruger du Pythons indeksnotation: et tal i parentes, der starter ved 0, der angiver placeringen af ​​elementet på listen.

I ovenstående eksempel liste_af_tryk [0] udbytter 1. liste_af_tryk [1] udbytter 2. liste_objekter [4] ville være denIngen objekt.

Indeksering af Python-liste

Hvis du bruger et positivt heltal til indekset, angiver heltalet placeringen af ​​det element, du skal se efter. Men hvis du bruger ennegativ heltal, derefter angiver heltalet positionen startende fraende på listen. For eksempel ved hjælp af et indeks på -1 er en praktisk måde at få fat i det sidste emne fra en liste uanset størrelsen på listen.

liste_af_tryk [-1] udbytter3liste_af_objekter [-1] udbytterIngen.

Du kan også bruge et heltal variabel som dit indeks. Hvisx = 0liste_af_tryk [x] giver 1 osv.

Tilføjelse og fjernelse af Python-listeelementer

Python har flere måder, du kan tilføje eller fjerne emner fra en liste.

  • .Tilføj() indsætter et element pående på listen. For eksempel, list_of_ints.append (4) ville vendeliste_af_int ind på listen[1,2,3,4]. Appends er hurtige og effektive; det tager omtrent samme tid at føje et element til en liste, uanset hvor lang listen er.
  • .pop () fjerner og returnerer det sidste element fra listen. Hvis vi løbx = liste_of_ints.pop () på originalenliste_af_int, x ville indeholde værdien3. (Du behøver ikke at tildele resultaterne af.pop () til en værdi, hvis du ikke har brug for det.).pop ()operationer er også hurtige og effektive.
  • .indsæt () indsætter et element på en vilkårlig position på listen. For eksempel,list_of_ints.insert (0,10) ville vendeliste_af_int ind i [10,1,2,3]. Bemærk, at jo tættere du indsætter foran på listen, jo langsommere vil denne handling være, selvom du ikke vil se meget af en afmatning, medmindre din liste har mange tusinde elementer, eller du laver indsatserne i en tæt loop.
  • .pop (x) fjerner elementet i indeksetx. Sålist_of_ints.pop (0) fjerner elementet ved indeks 0. Igen, jo tættere du er foran på listen, jo langsommere kan denne handling være.
  • .remove (vare) fjerner et element fra en liste, menikke baseret på dets indeks. Hellere, .fjerne() fjernerførste forekomst af det objekt, du angiver, og søger fra toppen af ​​listen og ned. Til[3,7,7,9,8]. Fjern (7), den første7 fjernes, hvilket resulterer i listen[3,7,9,8]. Denne operation kan også blive langsommere for en stor liste, da den teoretisk skal krydse hele listen for at arbejde.

Udskæring af en Python-liste

Lister kan opdeles i nye lister, en proces kaldetudskæring. Pythons skive-syntaks giver dig mulighed for at specificere, hvilken del af en liste der skal udskæres, og hvordan man manipulerer den udskårne del.

Du så ovenfor, hvordan du bruger parentesnotationen til at få et enkelt element fra en liste: min_liste [2], for eksempel. Skiver bruger en variant af den samme indeksnotation (og følger de samme indekseringsregler): liste_objekt [start: stop: trin].

  • Start er positionen på listen til at starte skiven.
  • hold op er den position på listen, hvor vi holder op med at skære. Med andre ord,denne position og alt efter den udelades.
  • trin er en valgfri "hvert nth element" -indikator for udsnittet. Som standard er dette1, så udsnittet bevarer hvert element fra listen, det er udskåret fra. Sæt trin til2, og du vælger hvert andet element osv.

Her er nogle eksempler. Overvej denne liste:

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

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

(Bemærk, at vi stopper ved indeks 4, ikke indeks 5!)

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

Hvis du udelader et bestemt skiveindeks, antager Python en standard. Forlad startindekset, og Python antager starten på listen:

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

Forlad stopindekset, og Python antager slutningen af ​​listen:

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

Dettrin element kan også værenegativ. Dette lader os tage skiver, der er omvendte kopier af originalen:

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

Bemærk, at du kan skære baglæns ved at bruge start- og stopindekser, der går baglæns, ikke fremad:

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

Husk også, at skiver af lister erkopier på den oprindelige liste. Den oprindelige liste forbliver uændret.

[Også på: De bedste gratis datavidenskabskurser under karantæne]

Sortering af en Python-liste

Python giver to måder at sortere lister på: Du kan generere en ny, sorteret liste fra den gamle, eller du kan sortere en eksisterende liste på stedet. Disse muligheder har forskellige adfærd og forskellige brugsscenarier.

For at oprette en ny, sorteret liste skal du brugesorteret () funktion på den gamle liste:

new_list = sorteret (old_list)

Dette vil sortere indholdet på listen ved hjælp af Pythons standardsorteringsmetoder. For strenge er standard alfabetisk rækkefølge; for tal er det stigende værdier. Bemærk, at indholdet på listen skal være konsistent, for at dette kan fungere. For eksempel kan du ikke sortere en blanding af heltal og strenge, men du kan sortere en liste, der er alle heltal eller alle strenge. Ellers får du enTypeFejl i sorteringsoperationen.

Hvis du vil sortere en liste i omvendt rækkefølge, skal du sendebaglæns parameter:

new_list = sorteret (old_list, reverse = True)

Den anden måde at sortere påpå plads sortering, udfører sorteringshandling direkte på den oprindelige liste. Brug listen til at gøre dette.sortere()metode:

old_list.sort ()

.sortere() tager ogsåbaglæns som parameter, så du kan sortere i omvendt rækkefølge.

Beggesorteret () og.sortere() også tage ennøgle parameter. Det nøgle parameter giver dig mulighed for at give en funktion, der kan bruges til at udføre en brugerdefineret sorteringshandling. Når listen er sorteret, overføres hvert element tilnøgle funktion, og den resulterende værdi bruges til sortering. For eksempel, hvis vi havde en blanding af heltal og strenge, og vi ønskede at sortere dem, kunne vi brugenøgle sådan her:

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

Bemærk, at denne kode ikke villekonvertere hvert element på listen til et heltal! Snarere ville det bruge heltalværdi af hvert element som dets sorteringsværdi. Bemærk også, hvordan vi bruger enprøv / undtagen blokere for at fælde eventuelle værdier, der ikke oversættes rent til et heltal, og returnere0 for dem som standard.

Python-lister er ikke arrays

En vigtig ting at vide om lister i Python er, at de ikke er "arrays". Andre sprog, som C, har endimensionelle eller flerdimensionelle konstruktioner kaldet arrays, der accepterer værdier af en enkelt type. Lister er heterogene; de kan acceptere genstande af enhver type.

Hvad mere er derer en separatarray skriv Python. Python array er designet til at efterligne opførslen af ​​en matrix i C, og det er primært beregnet til at lade Python arbejde med C-arrays. Detarray type er nyttig i disse tilfælde, men i næsten alle pure-Python tilfælde vil du bruge lister.

Hvornår skal man bruge Python-lister (og hvornår ikke)

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

  • Du skal finde ting hurtigt efter deresposition i en samling. At få adgang til en hvilken som helst position på en liste tager den samme tid, så der er ingen præstationsstraff for at slå op selv det millionste element på en liste.
  • Du tilføjer og fjerner til samlingen hovedsageligt ved at tilføje til slutningen eller fjerne fra slutningen på samme måde som en stak. Igen tager disse operationer den samme tid uanset længden af ​​listen.

En Python-liste er mindre egnet, når:

  • Du vil finde et element på en liste, men du kender ikke dets position. Dukan gør dette med.indeks() ejendom. For eksempel kan du brugelist_of_ints.index (1) for at finde indekset for den første forekomst af nummeret1 iliste_af_int. Hastighed bør ikke være et problem, hvis din liste kun er et par punkter lang, men for lister tusindvis af varer lang betyder det, at Python skal søge i hele listen. I et scenarie som dette skal du bruge en ordbog, hvor hvert element kan findes ved hjælp af en nøgle, og hvor opslagstiden vil være den samme for hver værdi.
  • Du vil tilføje eller fjerne emner fra enhver position undtagen slutningen. Hver gang du gør dette, skal Python bevæge sighver anden vare efterdet tilføjede eller fjernede element. Jo længere listen er, desto større bliver performance-problemet. Pythonsdeque objekt passer bedre, hvis du vil tilføje eller fjerne objekter frit fra starten eller slutningen af ​​listen.

Sådan gør du mere med Python

  • Sådan pakkes Python-apps med BeeWare Rejsetaske
  • Sådan køres Anaconda side om side med andre pythoner
  • Sådan bruges Python-dataglas
  • Kom godt i gang med async i Python
  • Sådan bruges asyncio i Python
  • 3 trin til en Python async-eftersyn
  • Sådan bruges PyInstaller til at oprette Python-eksekverbare filer
  • Cython tutorial: Sådan fremskyndes Python
  • Sådan installeres Python på den smarte måde
  • Sådan styres Python-projekter med Poetry
  • Sådan styres Python-projekter med Pipenv
  • Virtualenv og venv: Python virtuelle miljøer forklaret
  • Python virtualenv og venv do's and don'ts
  • Python-gevind og underprocesser forklaret
  • Sådan bruges Python debugger
  • Sådan bruges timeit til at profilere Python-kode
  • Sådan bruges cProfile til profilering af Python-kode
  • Sådan konverteres Python til JavaScript (og tilbage igen)