Itertool-functies¶

de volgende modulefuncties construeren en retourneren van iterators. Sommige voorzieningenstromen van oneindige lengte, dus ze moeten alleen worden benaderd door functies of bladeren die de stroom afkappen.

itertools.accumulate(iterable)¶

Maak een iterator die geaccumuleerde sommen of geaccumuleerde resultaten van andere binaire functies retourneert (gespecificeerd via het optionalfunc argument).,

als func wordt gegeven, moet het een functie van twee argumenten zijn. Elementen van de input iterable kunnen elk type zijn dat kan worden geaccepteerd als argumenten voor func. (Bijvoorbeeld, met de standaard operatie van toevoeging, kunnen elementen Elk addabletype zijn, inclusief Decimal ofFraction.)

meestal komt het aantal elementen uitvoer overeen met de invoer iterable.Echter, als het sleutelwoord argument initial wordt gegeven, deaccumulatie begint met de initiële waarde, zodat de outputhas een element meer dan de input iterable.,

ruwweg gelijk aan:

Er zijn een aantal toepassingen voor het func argument. Het kan worden ingesteld opmin() voor een lopend minimum, max() voor een lopend maximum, ofoperator.mul() voor een lopend product. Aflossingstabellen kunnen wordengebouwd door rente te accumuleren en betalingen toe te passen. Eerste-orderrecurrentie-relaties kunnen worden gemodelleerd door de initiële waarde in de iterable op te geven en alleen het geaccumuleerde totaal in func-argument te gebruiken:

zie functools.reduce() voor een soortgelijke functie die alleen de uiteindelijke geaccumuleerde waarde retourneert.,

nieuw in versie 3.2.

gewijzigd in versie 3.3: De optionele func-parameter toegevoegd.

gewijzigd in versie 3.8: de optionele initiële parameter toegevoegd.

itertools.chain(*iterables)¶

Maak een iterator die elementen retourneert van het eerste iterable totdat het is afgebroken, waarna het verder gaat naar het volgende iterable, totdat alle iterables zijn afgebroken. Gebruikt voor het behandelen van opeenvolgende opeenvolgingen als één enkele opeenvolging.,Ruwweg equivalent aan:

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

classmethod chain.from_iterable(iterable)¶

alternatieve constructor voor chain(). Krijgt geketende ingangen van een enkele iterable argument dat lui wordt geëvalueerd. Ruwweg equivalent aan:

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 length subsequences of elements from the input iterable.,

De combinatie tupels worden uitgezonden in lexicografische volgorde volgens de volgorde van de invoer iterabel. Dus, als de input iterable is gesorteerd, zal de combinatie tupels worden geproduceerd in gesorteerde volgorde.

elementen worden behandeld als uniek op basis van hun positie, niet op basis van hun waarde. Dus als de invoerelementen uniek zijn, zullen er geen repeatvalues zijn in elke combinatie.,

Ongeveer gelijk aan:

De code voor de combinations() kan ook worden uitgedrukt als een subsequenceof permutations() na het filteren van items waar de elementen zijn notin gesorteerde volgorde (op basis van hun positie in de ingang zwembad):

Het aantal items kunnen worden geretourneerd n! / r! / (n-r)! wanneer 0 <= r <= nof nul wanneer r > n.,

itertools.combinations_with_replacement(iterable, r)¶

Return R length subsequences of elements from the input iterableallowing individual elements to be repeat more than once.

De combinatie tupels worden uitgezonden in lexicografische volgorde volgens de volgorde van de invoer iterabel. Dus, als de input iterable is gesorteerd, zal de combinatie tupels worden geproduceerd in gesorteerde volgorde.

elementen worden behandeld als uniek op basis van hun positie, niet op basis van hun waarde. Dus als de invoerelementen uniek zijn, zullen de gegenereerde combinaties ook uniek zijn.,

ruwweg gelijk aan:

de code voor combinations_with_replacement() kan ook worden uitgedrukt als vervolg van product() na het filteren van items waar de elementen niet in gesorteerde volgorde zijn (afhankelijk van hun positie in de invoerpool):

Het aantal geretourneerde items is (n+r-1)! / r! / (n-1)! wanneer n > 0.

nieuw in versie 3.1.,

itertools.compress(data, selectors)¶

Maak een iterator die elementen filtert uit gegevens die alleen die bevatten die een overeenkomstig element bevatten in selectors dat evalueert naar True.Stopt wanneer de data of selectors iterables is uitgeput.Ruwweg gelijk aan:

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

nieuw in versie 3.1.

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

Maak een iterator die gelijkmatig verdeelde waarden retourneert beginnend met getal start., Vaak gebruikt als argument voor map() om opeenvolgende gegevenspunten te genereren.Ook gebruikt met zip() om volgnummers toe te voegen. Ruwweg gelijk aan:

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

bij het tellen met drijvende-kommagetallen kan een betere nauwkeurigheid soms worden bereikt door multiplicatieve code te vervangen, zoals: (start + step * ifor i in count()).

gewijzigd in versie 3.1: toegevoegd stap argument en Toegestaan niet-integer argumenten.,

itertools.cycle(iterable)¶

Maak een iterator die elementen van de iterable retourneert en een kopie van elk opslaat.Wanneer de iterable is uitgeput, retourneert u elementen uit de opgeslagen kopie. Herhaal oneindig. Ruwweg gelijk aan:

Opmerking, Dit lid van de toolkit kan aanzienlijke extra opslag nodig hebben (afhankelijk van de lengte van de iterable).,

itertools.dropwhile(predicaat, iterable)¶

Maak een iterator die elementen uit de iterable laat vallen zolang het predicaat waar is; daarna geeft elk element terug. Merk op dat de iterator geen uitvoer produceert totdat het predicaat eerst onwaar wordt, dus het kan een lengthystart-up tijd hebben. Ruwweg gelijk aan:

itertools.filterfalse(predicaat, iterable)¶

Maak een iterator die elementen filtert van iterable en die alleen degenen retourneert waarvoor het predicaat Falseis., Als het predicaat None is, geeft u de items terug die onwaar zijn. Ruwweg gelijk aan:

itertools.groupby(iterable, key=None)¶

Maak een iterator die opeenvolgende sleutels en groepen van de iterable retourneert.De sleutel is een functie die een sleutelwaarde berekent voor elk element. Indien niet gespecificeerd of None is, wordt standaard een identiteitsfunctie gebruikt en wordt het element ongewijzigd geretourneerd. Over het algemeen moet de iterable al op dezelfde sleutelfunctie worden gesorteerd.,

de werking van groupby() is vergelijkbaar met het uniq filter in Unix. Het genereert een pauze of een nieuwe groep telkens wanneer de waarde van de sleutelfunctie verandert(daarom is het meestal noodzakelijk om de gegevens gesorteerd te hebben met dezelfde sleutelfunctie). Dat gedrag verschilt van SQL ‘ s groep door welke aggregaten commonelements ongeacht hun invoervolgorde.

de geretourneerde groep is zelf een iterator die de onderliggende iterabel deelt met groupby()., Omdat de bron gedeeld wordt, is de vorige groep niet meer zichtbaar als het groupby()object geavanceerd is. Dus, als die gegevens later nodig zijn, moet het worden opgeslagen als een lijst:

groupby() is ongeveer gelijk aan:

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

maak een iterator die geselecteerde elementen van de iterable retourneert. Als start isniet-nul is, worden elementen uit de iterable overgeslagen totdat start is bereikt.,Daarna worden elementen achtereenvolgens geretourneerd, tenzij de stap hoger is ingesteld daneen, waardoor items worden overgeslagen. Als stop None is, dan gaat de iteratie door totdat de iterator is uitgeput, als dat al het geval is; anders stopt het op de gespecificeerde positie. In tegenstelling tot reguliere slicing ondersteunt islice() geen negatieve waarden voor start, stop of step. Kan worden gebruikt om relatedfields te extraheren uit gegevens waar de interne structuur is afgevlakt(bijvoorbeeld, amulti-line rapport kan een naam veld op elke derde regel)., Ruwweg gelijk aan:

Als start None is, dan begint de iteratie bij nul. Als step Noneis, dan is de step standaard één.

itertools.permutations(iterable, r=None)¶

retourneer opeenvolgende R lengtepermutaties van elementen in de iterable.

als r niet is gespecificeerd of None is, dan wordt r standaard ingesteld op de lengte van de iterable en worden alle mogelijke permutaties over de volledige lengte gegenereerd.

de permutatie tupels worden uitgezonden in lexicografische volgorde volgens de volgorde van de invoer iterabel., Dus, als de input iterable is gesorteerd, zal de combinatie tupels worden geproduceerd in gesorteerde volgorde.

elementen worden behandeld als uniek op basis van hun positie, niet op basis van hun waarde. Dus als de invoerelementen uniek zijn, zullen er geen repeatvalues zijn in elke permutatie.,

Ongeveer gelijk aan:

De code voor de permutations() kan ook worden uitgedrukt als een deelrij vanproduct(), gefilterd uit te sluiten-items met herhalende elementen (thosefrom dezelfde positie in de ingang zwembad):

Het aantal items kunnen worden geretourneerd n! / (n-r)! wanneer 0 <= r <= nof nul wanneer r > n.

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

Cartesisch product van input iterables.,

de geneste lussen cyclus als een kilometerteller met het meest rechtse element vooruit op elke iteratie. Dit patroon creëert een lexicografische volgorde, zodat als de input ‘ s iterables worden gesorteerd, de product tupels worden uitgezonden in sorteorder.

om het product van een iterable met zichzelf te berekenen, specificeer het aantal herhalingen met het optionele argument herhaal sleutelwoord. Bijvoorbeeld,product(A, repeat=4) betekent hetzelfde als product(A, A, A, A).,

Deze functie is ongeveer gelijk aan de volgende code, behalve dat de daadwerkelijke implementatie geen tussentijdse resultaten in het geheugen opbouwt:

voordat product() wordt uitgevoerd, verbruikt het volledig de input iterables,waarbij pools van waarden in het geheugen worden gehouden om de producten te genereren. Dienovereenkomstig is het alleen nuttig met eindige inputs.

itertools.repeat(object)¶

Maak een iterator die object keer op keer retourneert. Runs indefinitelyzonder de tijden argument is gespecificeerd., Gebruikt als argument voor map() voor variabele parameters voor de aangeroepen functie. Ook gebruikt met zip() om een invariant deel van een tupelrecord te maken.

ruwweg equivalent aan:

een algemeen gebruik voor herhaling is het leveren van een stroom constante waarden aan mapor zip:

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

itertools.starmap(function, iterable)¶

maak een iterator die de functie berekent met behulp van argumenten verkregen uit de iterable., Gebruikt in plaats van map() wanneer argument parameters al zijn gegroepeerd in tupels van een enkele iterable (de gegevens zijn”vooraf gezipt”). Het verschil tussen map() en starmap() loopt parallel met het verschil tussen function(a,b) en function(*c). Ruwweg equivalent aan:

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

itertools.takewhile(predicaat, iterable)¶

Maak een iterator die elementen van de iterable retourneert zolang hetvoorteken waar is., Ruwweg equivalent aan:

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

retourneer n onafhankelijke iteratoren van een enkele iterable.

de volgende Python-code helpt uitleggen wat tee doet (hoewel de daadwerkelijke implementatie complexer is en slechts één onderliggende FIFO-wachtrij gebruikt).

ongeveer gelijk aan:

zodra tee() een splitsing heeft gemaakt, mag de oorspronkelijke iterable nergens anders worden gebruikt; anders kan de iterable geavanceerd worden zonder dat de tee-objecten worden geà nformeerd.,

tee iteratoren zijn niet draadveilig. Een RuntimeError kan beschadigd worden bij gelijktijdig gebruik van iteratoren die worden geretourneerd door dezelfde tee()aanroep, zelfs als de originele iterable veilig is voor schroefdraad.

deze itertool kan aanzienlijke extra opslag nodig hebben (afhankelijk van hoe veel tijdelijke gegevens moeten worden opgeslagen). In het algemeen is het sneller omlist() te gebruiken in plaats van tee().,

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

Maak een iterator die elementen aggregeert van elk van de iterables. Als theiterables van ongelijke lengte zijn, worden ontbrekende waarden ingevuld met fillvalue.Iteratie gaat door tot de langste iterabel is uitgeput. Ruwweg gelijk aan:

als een van de iterables potentieel oneindig is, dan moet de functie zip_longest()worden omwikkeld met iets dat het aantal aanroepen beperkt(bijvoorbeeld islice() of takewhile())., Indien niet opgegeven, staat fillvalue standaard op None.