Itertool functions¶

följande modul fungerar alla konstruera och returnera iteratorer. Vissa gerdrömmar av oändlig längd, så de bör endast nås av funktioner ellerloops som trunkerar strömmen.

itertools.accumulate(iterable)¶

Gör en iterator som returnerar ackumulerade summor, eller ackumuleraderesultat av andra binära funktioner (specificeras via optionalfunc-argumentet).,

om func levereras bör det vara en funktionav två argument. Element i inmatningen kan vara vilken typ som helst som kan accepteras som argument till func. (Till exempel medstandardfunktionen för addition kan element vara vilken addabletype som helst, inklusive Decimal ellerFraction.)

vanligtvis matchar antalet element som matas ut den inmatning som är möjlig.Om sökordsargumentet initial tillhandahålls, leder denackumuleringen av med det ursprungliga värdet så att utmatningen har ett mer element än den inmatning som är möjlig.,

ungefär motsvarar:

det finns ett antal användningsområden för func-argumentet. Den kan ställas in påmin() för ett minimum som körs, max() för ett maximum som körs, elleroperator.mul() för en produkt som körs. Amorteringstabeller kan varabyggd genom att ackumulera ränta och tillämpa betalningar. Förstoringsrecurrence-relationerkan modelleras genom att ange det ursprungliga värdet i det tillåtna och bara använda den ackumulerade summan i func-argumentet:

sefunctools.reduce() för en liknande funktion som endast returnerar det slutliga ackumulerade värdet.,

nytt i version 3.2.

ändrad i version 3.3: lade till func-parametern som tillval.

ändrad i version 3.8: lade till den valfria initialparametern.

itertools.chain(*iterables)¶

Gör en iterator som returnerar element från den första iterable tills den är exhausted, fortsätter sedan till nästa iterable, tills alla iterables är exhausted. Används för att behandla på varandra följande sekvenser som en enda sekvens.,Ungefär lika med:

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 konstruktör för chain(). Blir kedjade ingångar från asingle iterable argument som utvärderas lättjefullt. Ungefär lika med:

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.,

kombinationsrutorna avges i lexikografisk beställning enligt den ordning som kan användas för inmatningen. Så, om inmatningen kan sorteras, kommer kombinationen tuples att produceras i sorterad ordning.

element behandlas som unika baserat på deras position, inte på derasvärde. Så om ingångselementen är unika kommer det inte att finnas några upprepningvärden i varje kombination.,

ungefär motsvarar:

koden för combinations() kan också uttryckas som en efterföljare permutations() efter filtrering poster där elementen inte äri sorterad ordning (beroende på deras position i inmatningspoolen):

antalet returnerade objekt är när 0 <= r <= neller noll när r > n.,

itertools.combinations_with_replacement(iterable, r)¶

Tillbaka r längd subsequences av element från ingången iterableallowing individuella element som upprepas mer än en gång.

kombinationsrutorna avges i lexikografisk beställning enligt den ordning som kan användas för inmatningen. Så, om inmatningen kan sorteras, kommer kombinationen tuples att produceras i sorterad ordning.

element behandlas som unika baserat på deras position, inte på derasvärde. Så om inmatningselementen är unika, de genererade kombinationernakommer också att vara unika.,

ungefär motsvarar:

koden förcombinations_with_replacement() kan också uttryckas som en efterföljare avproduct() efter filtrering poster där elementenär inte i sorterad ordning (beroende på deras position i inmatningspoolen):

antalet objekt som returneras är(n+r-1)! / r! / (n-1)! när(n+r-1)! / r! / (n-1)!när n > 0.

nytt i version 3.1.,

itertools.compress(data, väljare)¶

Gör en iterator som filtrerar element från data som endast returnerar de somhar ett motsvarande element i väljare som utvärderar tillTrue.Stoppar när antingen data eller väljare iterables har uttömts.Ungefär motsvarande:

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

nytt i version 3.1.

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

Gör en iterator som returnerar jämnt fördelade värden som börjar med nummerstart., Ofta används som ett argument till map() för att generera på varandra följande datapunkter.Används också med zip() för att lägga till sekvensnummer. Ungefär lika med:

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 man räknar med flyttal kan bättre noggrannhet ibland strandieved genom att ersätta multiplikativ kod som: (start + step * ifor i in count()).

ändrad i version 3.1: tillagt stegargument och tillåtna icke-heltalsargument.,

itertools.cycle(iterable)¶

Gör en iterator som returnerar element från det iterable och sparar en kopia av varje.När det är uttömt, returnera element från den sparade kopian. Repeatsindefinitely. Ungefär lika med:

Obs! den här medlemmen i verktygslådan kan kräva betydande hjälplagring (beroende på längden på den tillåtna).,

itertools.dropwhile(predikat, iterable)¶

Gör en iterator som släpper element från det iterable så länge predicateis sant; efteråt returnerar varje element. Observera att iteratorn inte producerarnågon utgång tills predikatet först blir falskt, så det kan ha en längdstarttid. Ungefär lika med:

itertools.filterfalse(predikat, iterable)¶

Gör en iterator som filtrerar element från iterable returnerar endast de som predikatet är False., Om predikat är None, returnera objektdet är falskt. Ungefär lika med:

itertools.groupby(iterable, key=None)¶

Gör en iterator som returnerar på varandra följande nycklar och grupper från iterable.Nyckeln är en funktion som beräknar ett nyckelvärde för varje element. Om notspecified eller är None, är nyckeln standard för en identitetsfunktion och returnerarelementet oförändrat. I allmänhet måste den tillåtna redan sorteras påsamma nyckelfunktion.,

driften avgroupby() liknaruniq – filtret i Unix. Itgenerates en paus eller ny grupp varje gång värdet på nyckelfunktionen ändras (varför det vanligtvis är nödvändigt att ha sorterat data med samma nyckelfunktion). Det beteendet skiljer sig från SQL grupp genom vilken aggregerar commonelements oavsett deras inmatningsordning.

den returnerade gruppen är i sig en iterator som delar den underliggande iterablewithgroupby()., Eftersom källan delas, när objektetgroupby()är avancerat, är den tidigare gruppen inte längre synlig. Så, om dessa data behövs senare, bör det lagras som en lista:

groupby() är ungefär likvärdigt med:

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

gör en iterator som returnerar markerade element från det tillåtna. Om start isnon-zero, hoppar element från det tillåtna över tills start uppnås.,Därefter returneras element i följd om inte steg är högre änett som resulterar i att objekt hoppas över. Om stopp är None, fortsätter iteration tills iteratorn är uttömd, om alls; annars stannar den vidspecificerad position. Till skillnad från vanlig skivning stöder islice() intenegativa värden för start, stopp eller steg. Kan användas för att extrahera relateradefält från data där den interna strukturen har planats (till exempel kan amulti-line-rapporten lista ett namnfält på var tredje rad)., Ungefär lika med:

om start är None, startar iterationen vid noll. Om steget är None,då är steget som standard ett.

itertools.permutations

(iterable, r=None)¶

returnera successiva r-längdpermutationer av element i det tillåtna.

Om r inte anges eller är None, så är R standardlängden för den tillåtna och alla möjliga fullängds permutationerskapas.

permutation tuples avges i lexikografisk beställning i enlighet med den ordning som kan användas för indata., Så, om inmatningen kan sorteras, kommer kombinationen tuples att produceras i sorterad ordning.

element behandlas som unika baserat på deras position, inte på derasvärde. Så om inmatningselementen är unika kommer det inte att finnas några upprepningvärden i varje permutation.,

ungefär lika med:

koden för permutations() kan också uttryckas som en efterföljning avproduct(), filtrerad för att utesluta poster med upprepade element (defrån samma position i inmatningspoolen):

antalet returnerade objekt är n! / (n-r)! när n! / (n-r)!när 0 <= r <= neller noll när r > n.

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

Cartesian produkt av input iterables.,

de kapslade slingorna cyklar som en vägmätare med det högra elementet advancingon varje iteration. Detta mönster skapar en lexikografisk beställning så att ominmatningens iterables sorteras, emitteras produkt tuples i sortedorder.

för att beräkna produkten av en iterable med sig själv, ange antalrepetitioner med det valfria repetera sökordsargumentet. Till exempel betyderproduct(A, repeat=4) detsamma som product(A, A, A, A).,

den här funktionen motsvarar ungefär följande kod, förutom att den faktiska implementeringen inte bygger upp mellanliggande resultat i minnet:

innanproduct() körs, förbrukar den helt inmatningsriterierna och håller pooler av värden i minnet för att generera produkterna. Följaktligen är det bara användbart med ändliga ingångar.

itertools.repeat(objekt)¶

Gör en iterator som returnerar objekt om och om igen. Körs obestämd tidlös gånger argumentet anges., Används som argument tillmap() forinvariant parametrar till den uppringda funktionen. Används även med zip() för att skapa en invariant del av en tuple-post.

ungefär motsvarar:

en vanlig användning för upprepning är att leverera en ström av konstanta värden till mapor zip:

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

itertools.starmap(funktion, iterable)¶

Gör en iterator som beräknar värdet på den funktion med hjälp av argument som erhållits fråndet är möjligt., Används i stället för map() när argumentparametrar redan är grupperade i tuplar från en enda iterable (data har ”pre-zipped”). Skillnaden mellan map() och starmap() paralleller skillnaden mellan function(a,b) och function(*c). Ungefär lika med:

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

itertools.takewhile(predikat, iterable)¶

Gör en iterator som returnerar element från det tillåtna så länge som predikatet är sant., Ungefär lika med:

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 independent iterators from a single iterable.

följande Python-kod hjälper till att förklara vad tee gör (även om det faktiska genomförandet är mer komplext och använder endast en enda underliggande FIFO-kö).

ungefär lika med:

en gång tee() har gjort en split, den ursprungliga iterable bör inte användas någon annanstans; annars kan den iterable få avancerade utan tee objekt informeras.,

tee iteratorer är inte threadsafe. ARuntimeError kan bero på att iteratorer samtidigt returneras av sammatee() – samtal, även om det ursprungliga värdet är threadsafe.

denna itertool kan kräva betydande extra lagring (beroende på hur mycket tillfälliga data behöver lagras). I allmänhet, om en iterator användermest eller alla data innan en annan iterator startar, är det snabbare att användalist() istället för tee().,

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

Gör en iterator som aggregerar element från var och en av iterables. Om theiterables är av ojämn längd fylls saknade värden med fillvalue.Iterationen fortsätter tills den längsta tillåtna är uttömd. Ungefär lika med:

om en av iterables är potentiellt oändlig, bör funktionen zip_longest()lindas med något som begränsar antalet samtal(till exempel islice() eller takewhile())., Om det inte anges är fillvalue standardvärdet None.