8.3. samlinger «High-performance container datatyperВ¶

Nytt i versjon 2.4.

Denne modulen implementerer spesialiserte container datatyper som gir alternativer til Python’s generelle formal innebygde containere, dikt, liste, sett og tuple.

Nytt i versjon 2.6.

Nytt i versjon 2.4.

Nytt i versjon 2.7.

Nytt i versjon 2.7.

Nytt i versjon 2.5.

I tillegg til betongbeholderklassen, inneholder samlingsmodulen abstrakte grunnklasser som kan brukes til a teste om en klasse gir et bestemt grensesnitt, for eksempel om det er hashable eller en kartlegging.

8.3.1. Tellerobjekter

Et tellerverktoy er tilveiebrakt for a stotte praktiske og raske tallier. For eksempel:

En Counter er en dikt underklasse for a telle hashable objekter. Det er en uordnet samling der elementene lagres som ordloknokler, og deres teller lagres som ordlighetsverdier. Teller er tillatt a v re noen heltallverdier inkludert null eller negativ teller. Tellerklassen ligner pa poser eller multisett pa andre sprak.

Elementene t lles fra en iterbar eller initialisert fra en annen kartlegging (eller teller):

Motobjekter har et ordbordsgrensesnitt bortsett fra at de returnerer nulltelling for manglende elementer i stedet for a hente en KeyError:

Innstilling av en telling til null fjerner ikke et element fra en teller. Bruk del for a fjerne det helt:

Nytt i versjon 2.7.

Tellerobjekter stotter tre metoder utover de som er tilgjengelige for alle ordboker:

Returner en iterator over elementer som gjentar hver sa mange ganger som tellingen. Elementer returneres i vilkarlig rekkefolge. Hvis et elements telle er mindre enn en, ignorerer elementene () det.

Returner en liste over de mest vanlige elementene og deres teller fra de vanligste til de minste. Hvis n er utelatt eller Ingen, returnerer most_common () alle elementene i disken. Elementer med like teller er bestilt vilkarlig:

Elementer trekkes fra en iterbar eller fra en annen kartlegging (eller teller). Liker dict.update (), men trekker teller i stedet for a erstatte dem. Bade innganger og utganger kan v re null eller negative.

De vanlige ordlistemetodene er tilgjengelige for Counter-objekter, bortsett fra to som fungerer annerledes for tellere.

Denne klassemetoden er ikke implementert for tellerobjekter.

Elementene t lles fra en iterable eller lagt til fra en annen kartlegging (eller teller). Liker dict.update (), men legger til teller i stedet for a erstatte dem. Ogsa den iterable forventes a v re en sekvens av elementer, ikke en sekvens av (nokkel, verdi) par.

Vanlige monstre for a jobbe med tellerobjekter:

Flere matematiske operasjoner er gitt for a kombinere Tellerobjekter for a produsere multisett (tellere som har teller storre enn null). Addisjon og subtraksjon kombinere tellere ved a legge til eller subtrahere tellingene til tilsvarende elementer. Kryssing og forening returnerer minimum og maksimum av tilsvarende teller. Hver operasjon kan akseptere innganger med signerte teller, men utgangen vil ekskludere resultater med teller pa null eller mindre.

Tellerne var prim rt designet for a arbeide med positive heltall for a representere lopende teller; Det ble imidlertid tatt vare pa a ikke unodig utelukke brukstilfeller som trenger andre typer eller negative verdier. For a hjelpe til med brukssaker, dokumenterer denne delen minimumsintervallet og typebegrensningene.

Kontaklassen selv er en ordboksunderklasse uten begrensninger pa nokler og verdier. Verdiene er ment a v re tall som representerer teller, men du kan lagre alt i verdifeltet. Metoden most_common () krever bare at verdiene kan bestilles. For in-place operasjoner som c [key] + = 1, trenger verdi typen bare stotte tillegg og subtraksjon. Sa fraksjoner, flyter og decimaler ville fungere og negative verdier stottes. Det samme gjelder ogsa for oppdatering () og subtraherer () som tillater negative og nullverdier for bade innganger og utganger. Multiset-metodene er kun laget for brukstilfeller med positive verdier. Inngangene kan v re negative eller null, men bare output med positive verdier blir opprettet. Det er ingen type restriksjoner, men verdien typen ma understotte tillegg, subtraksjon og sammenligning. Elementene () -metoden krever heltalltall. Den ignorerer null og negativ telling.

Tellerklasse tilpasset Python 2.5 og en tidlig poseoppskrift for Python 2.4.

Wikipedia oppforing for Multisets.

C + + multisets oppl ring med eksempler.

For matematiske operasjoner pa multisett og deres brukstilfeller, se Knuth, Donald. Art of Computer Programming Volume II, avsnitt 4.6.3, ovelse 19.

For a oppsummere alle forskjellige multisett av en gitt storrelse over et gitt sett med elementer, se itertools.combinations_with_replacement ().

kart (Counter, combinations_with_replacement (BABB, 2)) «& gt; AA AB AC BB BC CC.

8.3.2. deque objects¶

Returnerer et nytt dekkobjekt initiert til venstre mot hoyre (ved hjelp av append ()) med data fra iterable. Hvis iterbar ikke er spesifisert, er den nye dekningen tom.

Deques er en generalisering av stabler og koer (navnet er uttalt og det er kort for en dobbel-endret ko). Deques stotter tradsikker, minneeffektiv legger til og popper fra hver side av dekselet med omtrent samme O (1) ytelse i begge retninger.

Selv om listobjektene stotter lignende operasjoner, er de optimalisert for rask fastlengsoperasjon og medforer O (n) minnebevegelseskostnader for pop (0) og innsats (0, v) operasjoner som endrer bade storrelsen og posisjonen til den underliggende datarrepresentasjonen .

Nytt i versjon 2.4.

Hvis maxlen ikke er spesifisert eller er None, kan deques vokse til en vilkarlig lengde. Ellers begrenses dekningen til den angitte maksimale lengden. Nar en begrenset lengde deque er full, nar nye elementer legges til, blir et tilsvarende antall elementer kassert fra den motsatte enden. Bundet lengdedeksler gir funksjonalitet som ligner pa halefilteret i Unix. De er ogsa nyttige for sporing av transaksjoner og andre datapooler hvor bare den siste aktiviteten er av interesse.

Endret i versjon 2.6: Lagt til maxlen parameter.

Dekkeobjekter stotter folgende metoder:

Legg til x til hoyre side av dekselet.

Legg til x til venstre side av dekselet.

Fjern alle elementene fra dekselet som forlater det med lengde 0.

Count antall deque elementer lik x.

Nytt i versjon 2.7.

Forleng hoyre side av dekselet ved a legge til elementer fra det iterable argumentet.

Forleng den venstre siden av dekselet ved a legge til elementer fra iterable. Merk, serien av venstre appends resulterer i reversering av rekkefolgen av elementer i det iterable argumentet.

Fjern og returner et element fra hoyre side av dekselet. Hvis ingen elementer er til stede, oker en IndexError.

Fjern og returner et element fra venstre side av dekselet. Hvis ingen elementer er til stede, oker en IndexError.

Fjernet den forste forekomsten av verdi. Hvis ikke funnet, oker en ValueError.

Nytt i versjon 2.5.

Vend elementene til dekselet pa plass og returner deretter Ingen.

Nytt i versjon 2.7.

Vri deque n trinnene til hoyre. Hvis n er negativt, roter du til venstre. Roterende ett skritt til hoyre tilsvarer: d.appendleft (d.pop ()).

Dekkeobjekter gir ogsa en skrivebeskyttet attributt:

Maksimal storrelse pa en deque eller None hvis ubundet.

Nytt i versjon 2.7.

I tillegg til ovennevnte stotter deques iterasjon, pickling, len (d), reversert (d), copy.copy (d), copy.deepcopy (d), medlemskapstesting med operatoren og abonnementsreferanser som d [ -1] . Indeksert tilgang er O (1) i begge ender, men bremser til O (n) i midten. For rask, tilfeldig tilgang, bruk lister i stedet.

8.3.2.1. deque Recipes¶

Denne delen viser ulike tiln rminger til a arbeide med dekker.

Bundet lengdedeksler gir funksjonalitet som ligner pa halefilteret i Unix:

En annen tiln rming til bruk av deques er a opprettholde en sekvens av nylig lagt elementer ved a legge til hoyre og popping til venstre:

Metoden rotate () gir mulighet til a implementere dekksnitt og sletting. For eksempel er en ren Python-implementering av del d [n] avhengig av rotate () -metoden for a plassere elementer som skal poppes:

For a implementere dekkssniving, bruk en lignende tiln rming som gjelder rotere () for a fa et malelement til venstre pa dekselet. Fjern gamle oppforinger med popleft (), legg til nye oppforinger med forlengelse (), og reverser deretter rotasjonen. Med mindre variasjoner pa denne tiln rmingen, er det enkelt a implementere stilstapemanipulasjoner som stil, drop, swap, over, pick, rot og roll.

8.3.3. defaultdict objects¶

Returnerer et nytt ordbokslignende objekt. defaultdict er en underklasse av den innebygde dict-klassen. Det overstyrer en metode og legger til en skrivbar instansvariabel. Den gjenv rende funksjonaliteten er den samme som for dikteringen og er ikke dokumentert her.

Det forste argumentet gir den opprinnelige verdien for standard_factory attributten; det er som standard Ingen. Alle gjenv rende argumenter behandles det samme som om de ble sendt til diktskonstruktoren, inkludert sokeordargumenter.

Nytt i versjon 2.5.

standarddiktobjekter stotter folgende metode i tillegg til standard diktoperasjoner:

Hvis standard_factory-attributtet er None, reiser dette et KeyError-unntak med nokkelen som argument.

Hvis default_factory ikke er None, kalles det uten argumenter for a angi en standardverdi for den oppgitte nokkelen, er denne verdien satt inn i ordlisten for nokkelen, og returnert.

Hvis ringer default_factory gir et unntak, blir dette unntaket forandret uendret.

Denne metoden kalles av __getitem __ () -metoden til diktaklassen nar den forespurte nokkelen ikke er funnet; Uansett hva den returnerer eller reiser, blir den returnert eller oppdratt av __getitem __ ().

Merk at __missing __ () ikke kalles for noen operasjoner i tillegg til __getitem __ (). Dette betyr at get () vil, som vanlige ordboker, returnere Ingen som standard i stedet for a bruke default_factory.

standarddiktobjekter stotter folgende instansvariabel:

Dette attributtet brukes av __missing __ () metoden; Den initialiseres fra det forste argumentet til konstruktoren, hvis den er til stede, eller til Ingen, hvis den er frav rende.

8.3.3.1. defaultdict Eksempler

Ved a bruke listen som standard_factory, er det enkelt a gruppere en sekvens av nokkelverdepar i en ordliste av lister:

Nar hver nokkel oppstar for forste gang, er den ikke allerede i kartleggingen; sa en oppforing blir automatisk opprettet ved hjelp av default_factory-funksjonen som returnerer en tom liste. List.append () -operasjonen legger deretter verdien til den nye listen. Nar tastene oppstar igjen, fortsetter oppslaget normalt (returnerer listen for den aktuelle nokkelen) og operasjonen list.append () legger til en annen verdi i listen. Denne teknikken er enklere og raskere enn en tilsvarende teknikk ved a bruke dict.setdefault ():

Angir default_factory til int gjor standarddiktet nyttig for telling (som en pose eller multisett pa andre sprak):

Nar et brev forst oppstar, mangler det fra kartleggingen, slik at default_factory-funksjonen kalles int () for a levere et standardtall pa null. Inkrementoperasjonen bygger deretter opp tellingen for hvert brev.

Funksjonen int () som alltid returnerer null er bare et spesielt tilfelle av konstante funksjoner. En raskere og mer fleksibel mate a skape konstante funksjoner pa, er a bruke itertools.repeat () som kan levere en konstant verdi (ikke bare null):

Innstilling av default_factory for a sette gjor standarddiktet nyttig for a bygge en ordliste av sett:

8.3.4. namedtuple () Fabrikkfunksjon for Tuples med navngitte felt

Navngitte tupler tilordner mening til hver posisjon i en tuple og tillater mer lesbar, selvdokumenterende kode. De kan brukes hvor vanlige tupler brukes, og de legger til muligheten til a fa tilgang til felt etter navn i stedet for posisjonindeks.

samlinger. namedtuple (type navn, field_names [, verbose = False] [, rename = False]) ¶

Returnerer en ny tuple-underklasse som heter navnet. Den nye underklassen brukes til a lage tupelignende objekter som har felt tilgjengelige ved attributtoppslag, samt a v re indekserbare og iterable. Forekomster av underklassen har ogsa en nyttig docstring (med typenavn og field_names) og en nyttig __repr __ () metode som viser tuple innholdet i et navn = verdi format.

Field_names er en sekvens av strenger som [‘x’, ‘y’]. Alternativt kan field_names v re en enkelt streng med hvert feltnavn skilt av hvite plass og / eller komma, for eksempel ‘x y’ eller ‘x, y’.

Enhver gyldig Python-identifikator kan brukes til et feltnavn med unntak av navn som begynner med en underskrift. Gyldige identifikatorer bestar av bokstaver, sifre og understreker, men starter ikke med et siffer eller understrek og kan ikke v re et sokeord som klasse, for, retur, global, passere, skrive ut eller heve.

Hvis omnavnet er sant, erstattes ugyldige feltnavn automatisk med posisjonsnavn. For eksempel konverteres [‘abc’, ‘def’, ‘ghi’, ‘abc’] til [‘abc’, ‘_1’, ‘ghi’, ‘_3’], eliminering av sokeordet def og duplikat feltnavn abc .

Hvis verbose er sant, skrives klasses definisjon like for den bygges.

Navngitte tuple-forekomster har ikke per-ordbok ordboker, sa de er lette og krever ikke mer minne enn vanlige tuples.

Nytt i versjon 2.6.

Endret i versjon 2.7: lagt til stotte for omdoping.

Navngitte tuples er spesielt nyttige for a tilordne feltnavn for a resultere i tuples returnert av csv eller sqlite3 modulene:

I tillegg til metodene som arves fra tuples, stotter navngitte tre ytterligere tre metoder og ett attributt. For a forhindre konflikter med feltnavn, begynner metoden og attributtnavnene med en underskrift.

classmethod somenamedtuple. _make (iterable) ¶

Klassemetode som lager en ny forekomst fra en eksisterende sekvens eller iterbar.

Returner en ny OrderedDict som karter feltnavn til de tilsvarende verdiene:

Endret i versjon 2.7: Returnerer en OrderedDict i stedet for en vanlig dikt.

Returner en ny forekomst av de navngitte tuplene som erstatter angitte felt med nye verdier:

Tusen av strenger som viser feltnavnene. Nyttig for introspeksjon og for a lage nye navngitte tuple typer fra eksisterende navngitte tuples.

For a hente et felt hvis navn er lagret i en streng, bruk funksjonen getattr ():

Hvis du vil konvertere en ordbok til en navngitt tuple, bruker du den dobbelte stjerneoperatoren (som beskrevet i Utpakning av argumentlister):

Siden en navngitt tuple er en vanlig Python-klasse, er det enkelt a legge til eller endre funksjonalitet med en underklasse. Slik legger du til et beregnet felt og et fast breddeutskriftsformat:

Underkategorien vist ovenfor setter __slots__ til en tom tuple. Dette bidrar til a holde minnekravene lave ved a hindre opprettelsen av forekomstordboker.

Subclassing er ikke nyttig for a legge til nye, lagrede felt. I stedet oppretter du bare en ny navngitt tuple-type fra _fields-attributtet:

Standardverdier kan implementeres ved hjelp av _replace () for a tilpasse en prototype-forekomst:

Oppregnede konstanter kan implementeres med navngitte tuples, men det er enklere og mer effektivt a bruke en enkel klassedeklarasjon:

8.3.5. OrderedDict objects¶

Ordnet ordboker er akkurat som vanlige ordboker, men de husker rekkefolgen at elementer ble satt inn. Nar iterating over en bestilt ordbok, returneres elementene i rekkefolge som deres nokler ble lagt til forst.

klassesamlinger. OrderedDict ([items]) В¶

Returner en forekomst av en dikt-underklasse, som stotter de vanlige diktemetodene. En OrderedDict er en dikt som husker rekkefolgen som noklene ble satt inn forst. Hvis en ny oppforing overskriver en eksisterende oppforing, blir originalinnleggingsposisjonen uendret. Hvis du sletter en oppforing og setter den pa nytt, flyttes den til slutten.

Nytt i versjon 2.7.

Popitem () -metoden for ordnede ordboker returnerer og fjerner et (nokkel, verdi) par. Parene returneres i LIFO-rekkefolge hvis sist er sant eller FIFO-ordre hvis det er feil.

I tillegg til de vanlige kartleggingsmetodene, stotter ordboker ogsa omvendt iterasjon ved hjelp av reversert ().

Likestillingstester mellom OrderedDict-objekter er bestillingsfolsomme og implementeres som liste (od1.items ()) == list (od2.items ()). Likestillingstester mellom OrderedDict-objekter og andre Mapping-objekter er ordrefolsomme som vanlige ordboker. Dette gjor at OrderedDict-objekter kan erstattes hvor som helst en vanlig ordbok brukes.

OrderedDict-konstruktoren og oppdateringen () -metoden aksepterer begge sokeord-argumenter, men ordren deres gar tapt fordi Python†™ s funksjonskall-semantikk sender inn sokeordargumenter ved hjelp av en vanlig uordnet ordbok.

8.3.5.1. OrderedDict Eksempler og oppskrifter

Siden en ordnet ordbok husker sin innforingsordre, kan den brukes i forbindelse med sortering for a lage en ordlisteord:

De nye sorterte ordbokene opprettholder sin sorteringsrekkefolge nar oppforingene slettes. Men nar nye nokler legges til, legges tastene til slutt og sorteringen opprettholdes ikke.

Det er ogsa rett frem til a lage en ordnet ordboksvariant som husker rekkefolgen noklene ble sist satt inn. Hvis en ny oppforing overskriver en eksisterende oppforing, endres den opprinnelige innforingsposisjonen og flyttes til slutten:

En ordnet ordbok kan kombineres med tellerklassen, slik at telleren husker at ordningselementene forst oppstar:

8.3.6. Samlinger Abstrakte basklasser

Samlingsmodulen tilbyr folgende ABCer:

ABCer for klasser som gir henholdsvis metodene __contains __ (), __hash __ (), __len __ () og __call __ ().

klassesamlinger. Iterable В¶

ABC for klasser som gir __iter __ () metoden. Se ogsa definisjonen av iterable.

klassesamlinger. Iterator В¶

ABC for klasser som gir __iter __ () og neste () metoder. Se ogsa definisjonen av iterator.

klassesamlinger. Sequence В¶ klassesamlinger. MutableSequence ¶

ABCer for skrivebeskyttede og mutable sekvenser.

klassesamlinger. Still inn klassekolleksjoner. MutableSet ¶

ABCer for skrivebeskyttede og mutable sett.

klassesamlinger. Mapping В¶ klasse samlinger. MutableMapping ¶

ABCer for skrivebeskyttet og mutable mappings.

klassesamlinger. MappingView В¶ klasse samlinger. Elementer Vis В¶ klasse samlinger. KeysView В¶ klassesamlinger. ValuesView ¶

ABCer for kartlegging, gjenstander, nokler og verdier.

Disse ABCene tillater oss a stille klasser eller tilfeller hvis de gir spesiell funksjonalitet, for eksempel:

Flere av ABCene er ogsa nyttige som mixins som gjor det enklere a utvikle klasser som stotter container APIer. For eksempel, for a skrive en klasse som stotter den fullstendige Set API, er det bare nodvendig a levere de tre underliggende abstrakte metodene: __contains __ (), __iter __ () og __len __ (). ABC leverer de gjenv rende metodene som __and __ () og isdisjoint ()

Notater om bruk av Set og MutableSet som mixin:

Siden enkelte operasjoner oppretter nye sett, ma standardmixin-metodene kreve en mate a lage nye forekomster fra en iterbar. Klassekonstruktoren antas a ha en signatur i form ClassName (iterable). Den antakelsen er fakturert til en intern klassemetode kalt _from_iterable () som kaller cls (iterable) for a produsere et nytt sett. Hvis Set mixin brukes i en klasse med en annen konstruktor signatur, ma du overstyre _from_iterable () med et klassemetode som kan konstruere nye forekomster fra et iterbart argument. For a overstyre sammenligningene (antagelig for hastighet, som semantikken er lost), omdefinere __le __ () og __ge __ (), sa vil de andre operasjonene automatisk folge med. Set mixin gir en _hash () -metode for a beregne en hash-verdi for settet; __hash __ () er imidlertid ikke definert fordi ikke alle sett er hashable eller immutable. For a legge til sett hashability ved hjelp av mixins, arv fra bade Set () og Hashable (), og definer deretter __hash__ = Set._hash.

Innholdsfortegnelse.

Forrige emne.

Neste emne.

Raskt sok.

Navigasjon.

Python Software Foundation er et non-profit selskap. Vennligst doner.


Hei! Vil du spille i det mest populære kasinoet? Vi samlet det for deg. Registrer deg nå!