Itertool funcții¶

următoarele module toate funcțiile de a construi și de a reveni iteratori. Unele oferăstreamuri de lungime infinită, astfel încât acestea ar trebui să fie accesate numai prin funcții saubucle care trunchiază fluxul.

itertools.accumulate(iterable)¶

Face un iterator care returnează acumulat sume, sau accumulatedresults de alte funcții binare (specificate prin intermediul optionalfunc argument).,

dacă func este furnizat, ar trebui să fie o funcțiede două argumente. Elementele de intrare iterabile pot fi de orice tipcare pot fi acceptate ca argumente pentru func. (De exemplu, cu operare implicit de plus, elemente poate fi orice addabletype inclusiv Decimal sauFraction.)

De obicei, numărul de elemente de ieșire se potrivește iterabil de intrare.Cu toate acestea, în cazul în care cuvântul cheie argument inițială este asigurată, acumularea duce cu valoarea inițială, astfel încât outputhas un element mai mult decât de intrare iterable.,

aproximativ echivalent cu:

există un număr de utilizări pentru argumentul func. Acesta poate fi setat lamin() pentru o funcționare minim, max() pentru o funcționare maximă, sauoperator.mul() pentru o funcționare a produsului. Tabelele de amortizare pot ficonstruit prin acumularea de dobânzi și aplicarea plăților. Primul-orderrecurrence relationscan fi modelat prin furnizarea de valoarea inițială în iterable și folosind doar acumulat în total, în func argument:

Vezi functools.reduce() pentru o funcție similară, care se întoarce doar final cumulate de valoare.,

nou în versiunea 3.2.

schimbat în versiunea 3.3: adăugat parametrul func opțional.

schimbat în versiunea 3.8: adăugat parametrul inițial opțional.

itertools.chain(*iterables)¶

Face un iterator care returnează elemente din primul iterable până isexhausted, apoi trece la următorul iterable, până când toate iterables areexhausted. Folosit pentru tratarea secvențelor consecutive ca o singură secvență.,Aproximativ echivalent cu:

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)¶

Supleant constructor pentru chain(). Primește intrări înlănțuite de la un singur argument iterabil care este evaluat leneș. Aproximativ echivalent cu:

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)¶

se Întoarcă r lungime subsequences de elemente de intrare iterable.,

tuplele combinate sunt emise în ordinea lexicografică în funcție deordinea iterabilului de intrare. Deci, dacă iterabilul de intrare este sortat, combinația de tupluri va fi produsă în ordine sortată.elementele sunt tratate ca unice în funcție de poziția lor, nu de valoarea lor. Deci, dacă elementele de intrare sunt unice, nu va exista repetarevalori în fiecare combinație.,

Aproximativ echivalent cu:

codul combinations() poate fi exprimat, de asemenea, ca un subsequenceof permutations() după filtrare înregistrări în cazul în care elementele nu sunt numai în ordine sortată (în funcție de poziția lor într-intrare piscina):

numărul de elemente de returnat este n! / r! / (n-r)! când 0 <= r <= nsau zero atunci când r > n.,

itertools.combinations_with_replacement(iterable, r)¶

se Întoarcă r lungime subsequences de elemente de intrare iterableallowing elementele individuale să fie repetate de mai multe ori.

tuplele combinate sunt emise în ordinea lexicografică în funcție deordinea iterabilului de intrare. Deci, dacă iterabilul de intrare este sortat, combinația de tupluri va fi produsă în ordine sortată.elementele sunt tratate ca unice în funcție de poziția lor, nu de valoarea lor. Deci, dacă elementele de intrare sunt unice, combinațiile generateva fi, de asemenea, unic.,

Aproximativ echivalent cu:

codul combinations_with_replacement() poate fi, de asemenea, și-a exprimat asa subsecventa de product() după filtrare înregistrări unde elementsare nu în ordine sortată (în funcție de poziția lor într-intrare piscina):

numărul de elemente de returnat este (n+r-1)! / r! / (n-1)! când n > 0.

nou în versiunea 3.1.,

itertools.compress(datele, selectoare)¶

Face un iterator care filtrează elementele de date revenind doar cei thathave un element corespunzător în selectoare care se evaluează la True.Se oprește atunci când datele sau selectori iterables a fost epuizat.Aproximativ echivalent cu:

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

nou în versiunea 3.1.

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

faceți un iterator care returnează valori distanțate uniform începând cu numărul start., Adeseautilizat ca argument pentru map() pentru a genera puncte de date consecutive.De asemenea, folosit cu zip() pentru a adăuga numere de secvență. Aproximativ echivalent cu:

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

atunci Când numărare cu numere în virgulă mobilă, precizie mai bună poate, uneori, putea i realizat f r înlocuind multiplicativ cod, cum ar fi: (start + step * ifor i in count()).

schimbat în versiunea 3.1: adăugat argument pas și a permis argumente non-întregi.,

itertools.cycle(iterable)¶

Face un iterator revenind elemente din iterable și a salva o copie din fiecare.Când iterabilul este epuizat, returnați elementele din copia salvată. Repetăîn mod sigur. Aproximativ echivalent cu:

Notă, Acest membru al setului de instrumente poate necesita stocare auxiliară semnificativă (în funcție de lungimea iterabilului).,

itertools.dropwhile(predicat, iterable)¶

Face un iterator care scade elemente din iterable atâta timp cât predicateis adevărat; după aceea, se întoarce de fiecare element. Notă, iteratorul nu produce nici o ieșire până când predicatul devine mai întâi fals, deci poate avea un timp lung de pornire. Aproximativ echivalent cu:

itertools.filterfalse(predicat, iterable)¶

Face un iterator care filtrează elementele de iterable revenind doar cei pentrucare predicatul este False., Dacă predicatul este None, returnați elementelecare sunt false. Aproximativ echivalent cu:

itertools.groupby(iterable, cheie=None)¶

Face un iterator care returnează consecutiv tastele și grupuri de iterable.Cheia este o funcție de calcul o valoare cheie pentru fiecare element. Dacă notspecified sau None, cheie implicit la o identitate funcție și returnsthe element neschimbat. În general, iterabilul trebuie să fie deja sortataceeași funcție cheie.,

funcționarea groupby() este similară cu filtrul uniq din Unix. Itgenerează o pauză sau un grup nou de fiecare dată când se modifică valoarea funcției cheie(motiv pentru care este de obicei necesar să fi sortat datele folosind aceeași tastăfuncție). Acest comportament diferă de grupul SQL prin care agregă elemente comune, indiferent de ordinea lor de intrare.

grupul returnat este el însuși un iterator care împărtășește iterablewith de bază groupby()., Deoarece sursa este partajată, când obiectul groupby()este avansat, grupul anterior nu mai este vizibil. Deci, în cazul în care datais necesare mai târziu, ar trebui să fie stocate ca o listă:

groupby() este aproximativ echivalent cu:

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

Face un iterator care returnează elementele selectate din iterable. Dacă start isnon-zero, atunci elementele din iterable sunt omise până când se ajunge la start.,După aceea, elementele sunt returnate consecutiv, cu excepția cazului în care Pasul este setat mai mare decât cel care are ca rezultat omiterea elementelor. Dacă nu mai este None, apoi iterationcontinues până iterator este epuizat, dacă este cazul; în caz contrar, se oprește la thespecified poziție. Spre deosebire de felierea obișnuită, islice() nu suportă valori negative pentru start, stop sau step. Poate fi folosit pentru a extrage relatedfields din datele în care structura internă a fost aplatizată (de exemplu, raportul amulti-line poate Lista un câmp de nume pe fiecare a treia linie)., Aproximativ echivalent cu:

dacă start este None, atunci iterația începe de la zero. Dacă Pasul este None, atunci pasul este implicit la unul.

itertools.permutations(iterable, r=None)¶

Întoarcere succesive r lungime permutări ale elementelor în iterable.

Dacă r nu este specificat sau este None, atunci r implicite la lengthof la iterable și toate posibile full-length permutationsare generat.tuplele de permutare sunt emise în ordinea lexicografică conformordinea iterabilului de intrare., Deci, dacă iterabilul de intrare este sortat, combinația de tupluri va fi produsă în ordine sortată.elementele sunt tratate ca unice în funcție de poziția lor, nu de valoarea lor. Deci, dacă elementele de intrare sunt unice, nu va exista repetarevalori în fiecare permutare.,

Aproximativ echivalent cu:

codul permutations() poate fi exprimat, de asemenea, ca o consecin aproduct(), filtrat pentru a elimina intrările cu elemente repetate (thosefrom aceeași poziție în intrare piscina):

numărul de elemente de returnat este n! / (n-r)! când 0 <= r <= nsau zero atunci când r > n.

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

produs Cartezian de intrare iterables.,

ciclul buclelor imbricate ca un odometru cu elementul cel mai din dreapta avansând la fiecare iterație. Acest model creează o ordonare lexicografică, astfel încât, dacă iterablele de intrare sunt sortate, tuplele produsului sunt emise în sortedorder.

pentru a calcula produsul unui iterabil cu el însuși, specificați numărul derepetări cu argumentul opțional repetare cuvânt cheie. De exemplu,product(A, repeat=4) înseamnă același lucru ca product(A, A, A, A).,

Această funcție este echivalentă cu următorul cod, cu excepția faptului că theactual de implementare a nu construi rezultatele intermediare în memorie:

Înainte product() ruleaza, se consumă complet intrare iterables,păstrând bazine de valori în memorie pentru a genera produse. În consecință, este util numai cu intrări finite.

itertools.repeat(obiect)¶

Face un iterator care returnează un obiect de peste si peste din nou. Ruleaza nedefinitelyunless ori argumentul este specificat., Folosit ca argument pentru map() forinvariant parametrii funcției numite. De asemenea, utilizat cu zip() tocreați o parte invariantă a unei înregistrări tuple.

Aproximativ echivalent cu:

O utilizare comună pentru repetare este de a furniza un flux de valori constante pentru mapor zip:

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

itertools.starmap(funcția, iterable)¶

Face un iterator care calculează funcția folosind argumente obținute din iterable., Folosit în loc de map() când argument parametri sunt alreadygrouped în tupluri dintr-o singură iterable (datele au fost „pre-fermoar”). Diferența între map() și starmap() paralelele distincție între function(a,b) și function(*c). Aproximativ echivalent cu:

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

itertools.takewhile(predicat, iterable)¶

Face un iterator care returnează elemente din iterable atâta timp cât thepredicate este adevărat., Aproximativ echivalent cu:

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)¶

se Întoarcă independent iteratori de la un singur iterable.

următorul cod Python ajută să explice ce face tee (deși realimplementation este mai complexă și utilizează doar o singură coadă underlyingFIFO).

Aproximativ echivalent cu:

o Dată tee() a făcut o ruptură, original iterable nu ar trebui să fie folosite oriunde altundeva; în caz contrar, iterable putea obține avansate fara tee obiecte a fi informat.,

tee iteratorii nu sunt threadsafe. Un RuntimeError poate beraised atunci când se utilizează simultan iteratori returnate de către același tee()apel, chiar dacă inițial iterable este sigură pentru fire.acest itertool poate necesita stocare auxiliară semnificativă (în funcție de modul în care trebuie stocate date temporare). În general, dacă un iterator usesmost sau toate datele înainte de un alt iterator începe, este mai rapid de a utilizalist() în loc de tee().,

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

Face un iterator care agregate elemente din fiecare din iterables. În cazul în care theiterables sunt de lungime inegală, valorile lipsă sunt completate cu fillvalue.Iterația continuă până când cea mai lungă iterabilă este epuizată. Aproximativ echivalent cu:

Dacă unul dintre iterables este potențial infinită, atunci zip_longest()funcția ar trebui să fie înfășurat cu ceva care limitează numărul de apeluri(de exemplu islice() sau takewhile())., Dacă nu este specificat,fillvalue implicit la None.