Itertool funktioner¶

følgende modul alle funktioner konstruere og vende tilbage iteratorer. Nogle giverdrømme af uendelig længde, så de bør kun få adgang til funktioner ellerløkker, der afkorter strømmen.

itertools.accumulate(iterable)¶

Gør en iterator, der returnerer et akkumuleret beløb, eller accumulatedresults af andre binære funktioner (angivet via optionalfunc argument).,

Hvis func leveres, skal det være en funktion af to argumenter. Elementer af input iterable kan være enhver typeder kan accepteres som argumenter til func. (For eksempel medstandardfunktionen af tilføjelse kan elementer være en hvilken som helst addabletype, herunder Decimal ellerFraction.)

normalt svarer antallet af elementer output til input iterable.Men hvis søgeordsargumentet initial er angivet, fører akkumuleringen ud med den oprindelige værdi, så outputhar et mere element end input iterable.,

omtrent svarende til:

Der er en række anvendelser til func-argumentet. Den kan indstilles tilmin() for et løbende minimum, max() for et løbende maksimum, elleroperator.mul() for et kørende produkt. Amortisering tabeller kan værebygget ved at akkumulere renter og anvende betalinger. Første-orderrecurrence relationscan modelleres ved at levere den oprindelige værdi i iterable og hjælp onlythe akkumuleret samlet i func-argument:

Se functools.reduce() for en lignende funktion, der returnerer kun thefinal akkumulerede værdi.,

nyt i version 3.2.

ændret i version 3.3: tilføjet parameteren valgfri func.

ændret i version 3.8: tilføjet den valgfri startparameter.

itertools.chain(*iterables)¶

Gør en iterator, der returnerer elementer fra den første iterable, indtil det isexhausted, derefter videre til den næste iterable, indtil alle iterables areexhausted. Anvendes til behandling af fortløbende sekvenser som en enkelt sekvens.,Det svarer nogenlunde til:

def chain(*iterables): # chain('ABC', 'DEF') --> A B C D E F for it in iterables: for element in it: yield element

classmethodchain.from_iterable(iterable)¶

Alternativ constructor for chain(). Får lænket input fra asingle iterable argument, der evalueres dovent. Det svarer nogenlunde til:

def from_iterable(iterables): # chain.from_iterable() --> A B C D E F for it in iterables: for element in it: yield element

itertools.combinations(iterable, r)¶

Return r længde undersekvenser af elementer fra input iterable.,

kombinationen tupler udsendes i leksikografisk rækkefølge i henhold til rækkefølgen af input iterable. Så hvis input iterable er sorteret,vil kombinationen tupler blive produceret i sorteret rækkefølge.

elementer behandles som unikke baseret på deres position, ikke på deres værdi. Så hvis inputelementerne er unikke, vil der ikke være nogen gentagelsesværdier i hver kombination.,

det svarer Nogenlunde til:

kode combinations() kan også være udtrykt som en subsequenceof permutations() efter filtrering af poster, hvor de elementer, der er notin sorteret rækkefølge (efter deres position i input-puljen):

antallet af returnerede varer er n! / r! / (n-r)! når 0 <= r <= neller nul, når r > n.,

itertools.combinations_with_replacement(iterable, r)¶

Return r længde undersekvenser af elementer fra input iterableallowing enkelte elementer gentages mere end en gang.

kombinationen tupler udsendes i leksikografisk rækkefølge i henhold til rækkefølgen af input iterable. Så hvis input iterable er sorteret,vil kombinationen tupler blive produceret i sorteret rækkefølge.

elementer behandles som unikke baseret på deres position, ikke på deres værdi. Så hvis inputelementerne er unikke, de genererede kombinationervil også være unik.,

det svarer Nogenlunde til:

kode combinations_with_replacement() kan også være udtryk for asa rækkefølge af product() efter filtrering af poster, hvor elementsare ikke i sorteret rækkefølge (efter deres position i input-puljen):

antallet af returnerede varer er (n+r-1)! / r! / (n-1)! når n > 0.

nyt i version 3.1.,

itertools.compress(data, selektorer)¶

Gør en iterator, at filtre elementer fra data, der vender tilbage er kun de thathave en tilsvarende element i selektorer, der evalueres til True.Stopper, når enten data eller selektorer iterables er opbrugt.Omtrent ækvivalent med:

def compress(data, selectors): # compress('ABCDEF', ) --> A C E F return (d for d, s in zip(data, selectors) if s)

nyt i version 3.1.

itertools.count(start=0, trin=1)¶

Gør en iterator, der returnerer jævnt fordelt værdier, begyndende med nummer start., Oftenused som et argument til map() for at generere på hinanden følgende datapunkter.Bruges også med zip() for at tilføje sekvensnumre. Det svarer nogenlunde til:

def count(start=0, step=1): # count(10) --> 10 11 12 13 14 ... # count(2.5, 0.5) -> 2.5 3.0 3.5 ... n = start while True: yield n n += step

Når at tælle med floating point tal, bedre nøjagtighed kan nogle gange beachieved ved at erstatte multiplikativ kode, såsom: (start + step * ifor i in count()).

ændret i version 3.1: tilføjet trinargument og tilladte ikke-heltalsargumenter.,

itertools.cycle(iterable)¶

Gør en iterator tilbagevendende elementer fra iterable og gemme en kopi af hver.Når iterable er opbrugt, returnere elementer fra den gemte kopi. Gentagelserubestemt. Omtrent svarende til:

Bemærk, Dette medlem af værktøjssættet kan kræve betydelig hjælpelager(afhængigt af længden af iterable).,

itertools.dropwhile(prædikat, iterable)¶

Gør en iterator, der falder elementer fra iterable så længe predicateis true; bagefter, vender tilbage hvert element. Bemærk, at iteratoren ikke producererenhver udgang, indtil prædikatet først bliver falsk, så det kan have en lengthystart-up tid. Det svarer nogenlunde til:

itertools.filterfalse(prædikat, iterable)¶

Gør en iterator, at filtre elementer fra iterable vender tilbage er kun de forwhich prædikatet er False., Hvis prædikatet er None, skal du returnere de varer, der er falske. Det svarer nogenlunde til:

itertools.groupby(iterable, key=Ingen)¶

Gør en iterator, der returnerer hinanden følgende taster og grupper fra iterable.Nøglen er en funktion, der beregner en nøgleværdi for hvert element. Hvis notspecified eller er None, er nøglen standard til en identitetsfunktion og returnerer elementet uændret. Generelt skal den iterbare allerede sorteres påden samme nøglefunktion.,

drift af groupby() svarer til uniq filter i Unix. Det genererer en pause eller en ny gruppe, hver gang værdien af nøglefunktionen ændres(hvorfor det normalt er nødvendigt at have sorteret dataene ved hjælp af den samme nøglefunktion). Denne adfærd adskiller sig fra S .l ‘ s gruppe, hvorved aggregater commonelements uanset deres inputordre.

den returnerede gruppe er i sig selv en iterator, der deler den underliggende iterablewithith groupby()., Da kilden deles, når objektet groupby()er avanceret, er den foregående gruppe ikke længere synlig. Så, hvis der datais behov senere, skal det være gemt som en liste:

groupby() svarer nogenlunde til:

itertools.islice(iterable, stop)¶itertools.islice(iterable, start, stop)

Gør en iterator, der returnerer udvalgte elementer fra iterable. Hvis start erikke-nul, springes elementer fra iterable over, indtil starten er nået.,Bagefter, elementer returneres fortløbende, medmindre trin er sat højere thanone hvilket resulterer i elementer, der springes over. Hvis stop er None, fortsætter iteration, indtil iteratoren er opbrugt, hvis overhovedet; ellers stopper den vedspecificeret position. I modsætning til almindelig udskæring understøtter islice() ikkenegative værdier for start, stop eller trin. Kan bruges til at udtrække relatedfields fra data, hvor den interne struktur er blevet fladtrykt (for eksempel kan amulti-line rapport liste et navn felt på hver tredje linje)., Omtrent svarende til:

Hvis start er None, starter iterationen ved nul. Hvis trin er None,er trinnet standard til en.

itertools.permutations(iterable, r=Ingen)¶

Tilbage successive r længde permutationer af elementerne i iterable.

Hvis r ikke er angivet eller er None, så r standard til lengthof den iterable og alle mulige fuld-længde permutationsare genereret.

permutationstuplerne udsendes i leksikografisk rækkefølge i henhold til rækkefølgen af input iterable., Så hvis input iterable er sorteret,vil kombinationen tupler blive produceret i sorteret rækkefølge.

elementer behandles som unikke baseret på deres position, ikke på deres værdi. Så hvis inputelementerne er unikke, vil der ikke være nogen gentagelsesværdier i hver permutation.,

det svarer Nogenlunde til:

kode permutations() kan også være udtrykt som en rækkefølge afproduct(), som er filtreret for at udelukke poster med gentagne elementer (thosefrom den samme position i input-puljen):

antallet af returnerede varer er n! / (n-r)! når 0 <= r <= neller nul, når r > n.

itertools.product(*iterables, repeat=1)¶

Kartesiske produkt af input iterables.,

de indlejrede sløjfer cyklusser som et kilometertæller med det yderste højre element advancingon hver iteration. Dette mønster skaber en leksikografisk bestilling, så hvis input s iterables sorteres, produktet tupler udsendes i sortedorder.

for at beregne produktet af en iterabel med sig selv skal du angive antallet afgentagelser med det valgfrie gentagelsesordsargument. For eksempel betyderproduct(A, repeat=4) det samme som product(A, A, A, A).,

Denne funktion svarer nogenlunde til den følgende kode, bortset fra at theactual gennemførelse ikke bygge op foreløbige resultater i hukommelsen:

Før product() kører, er det helt forbruger input iterables,at holde puljer af værdier i hukommelse til at generere produkter. Derfor er det kun nyttigt med endelige indgange.

itertools.repeat(objekt) Make

lav en iterator, der returnerer objekt igen og igen. Kører udefinitelyunless tiderne argument er angivet., Bruges som argument til map() forinvariante parametre til den kaldte funktion. Bruges også med zip() til at skabe en invariant del af en tuple record.

det svarer Nogenlunde til:

En fælles brug for at gentage, er at levere en konstant strøm af værdier til mapor zip:

>>> list(map(pow, range(10), repeat(2)))

itertools.starmap(funktion, iterable)¶

Gør en iterator, der beregner funktionen ved hjælp af argumenter, der er opnået fra iterable., Bruges i stedet for map() når argumentparametre allerede er grupperet i tupler fra en enkelt iterbar (dataene er blevet “pre-zippet”). Thedifference mellem map() og starmap() paralleller distinctionbetween function(a,b) og function(*c). Det svarer nogenlunde til:

def starmap(function, iterable): # starmap(pow, ) --> 32 9 1000 for args in iterable: yield function(*args)

itertools.takewhile(prædikat, iterable)¶

Gør en iterator, der returnerer elementer fra iterable så længe thepredicate er sandt., Det svarer nogenlunde til:

def takewhile(predicate, iterable): # takewhile(lambda x: x<5, ) --> 1 4 for x in iterable: if predicate(x): yield x else: break

itertools.tee(iterable, n=2)¶

Return n uafhængige iteratorer fra en enkelt iterable.

følgende Python-kode hjælper med at forklare, hvad tee gør (selvom actualimplementation er mere kompleks, og bruger kun en enkelt underlyingFIFO kø).

det svarer Nogenlunde til:

Når tee() har lavet en split, den oprindelige iterable bør ikke væreanvendes andre steder; ellers iterable kunne få avancerede withoutthe tee objekter bliver informeret.,

tee iteratorer er ikke threadsafe. RuntimeError kan beraised, når du bruger samtidigt iteratorer, der returneres af det samme tee()opkald, selv om den oprindelige iterable er threadsafe.

dette itertool kan kræve betydelig hjælpelager (afhængigt af hvordanmange midlertidige data skal opbevares). Generelt, hvis en iterator usesmost eller alle af de data, før en anden iterator starter, så er det hurtigere at brugelist() i stedet for tee().,

itertools.zip_longest(*iterables, fillvalue=Ingen)¶

Gør en iterator der samler elementer fra hver af de iterables. Hvis theiterables er af ujævn længde, er manglende værdier udfyldt med fillvalue.Iteration fortsætter, indtil den længste iterable er opbrugt. Det svarer nogenlunde til:

Hvis en af de iterables er potentielt uendelig, så zip_longest()funktion bør være pakket ind med noget, der begrænser antallet af opkald(f.eks. islice() eller takewhile())., Hvis ikke angivet,fillvalue standard til None.