Itertool toiminnot¶

seuraavan moduulin toiminnot kaikki rakentaa ja palauttaa iteraattorit. Jotkut providestreams äärettömän pitkä, joten niitä pitäisi käyttää vain toimintoja orloops, jotka katkaisevat virta.

itertools.accumulate(iterable)¶

Tee iterator, joka palauttaa kertynyt summia, tai accumulatedresults muita binary toiminnot (määritetty kautta optionalfunc argumentti).,

Jos func toimitetaan, sen tulee olla kahden argumentin funktio. Elementit input iterable voi olla mikä tahansa typethat voidaan hyväksyä argumentteina func. (Esimerkiksi, kanssa, default toiminnan lisäksi elementit voivat olla mitä tahansa addabletype mukaan lukien Decimal taiFraction.)

yleensä elementtien määrä vastaa syötettä, joka on iteroitava.Kuitenkin, jos avainsanan argumentti alkuperäinen on säädetty, theaccumulation johtaa pois alkuperäisestä arvosta niin, että outputhas yksi elementti kuin tulo iterable.,

vastaa suurin piirtein:

func-argumentille on useita käyttötarkoituksia. Se voidaan asettaamin() jo käynnissä vähintään max() jo käynnissä maksimi, taioperator.mul() jo käynnissä tuote. Poistotaulukot voidaan rakentaa keräämällä korkoa ja soveltamalla maksuja. Ensimmäinen-orderrecurrence relationscan olla mallinnettu toimittamalla alkuperäinen arvo iterable ja käyttää ainoastaan kertynyt yhteensä func perustelu:

Katso functools.reduce() samanlainen funktio, joka palauttaa vain lopulliset kertynyt arvo.,

uusi versiossa 3.2.

muutettu versiossa 3.3: lisätty valinnainen func-parametri.

muutettu versiossa 3.8: lisätty valinnainen alkuparametri.

itertools.chain(*iterables)¶

Tee iterator, joka palauttaa elementtejä ensimmäisestä iterable, kunnes se isexhausted, etenee sitten seuraavaan iterable, kunnes kaikki iterables areexhausted. Käytetään peräkkäisten sekvenssien hoitoon yhtenä sekvenssinä.,Suurin piirtein:

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

Vaihtoehtoinen rakentaja chain(). Saa ketjutettua tuloa asingle iterable argumentti, joka arvioidaan laiskasti. Suurin piirtein:

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

Paluu t pituus subsequences elementtejä input iterable.,

yhdistelmä tuples lähetetään lexicographic järjestyksessä input iterable. Joten, jos tulo iterable on lajiteltu, yhdistelmä tuples tuotetaan lajiteltu järjestyksessä.

elementit käsitellään ainutlaatuisina niiden sijainnin, Ei niiden arvon perusteella. Joten jos tuloelementit ovat ainutlaatuisia, ei ole toistoja kussakin yhdistelmässä.,

vastaa Karkeasti:

koodi combinations() voi olla myös ilmaistu subsequenceof permutations() suodatuksen jälkeen merkinnät, joissa elementit eivät lajitellaan järjestyksessä (sen mukaan, mikä niiden asema tulo-allas):

useita kohteita palasi on n! / r! / (n-r)!, kun 0 <= r <= ntai nolla, kun r > n.,

itertools.combinations_with_replacement(iterable, t)¶

Paluu t pituus subsequences elementtejä input iterableallowing yksittäisiä osia voidaan toistaa useammin kuin kerran.

yhdistelmä tuples lähetetään lexicographic järjestyksessä input iterable. Joten, jos tulo iterable on lajiteltu, yhdistelmä tuples tuotetaan lajiteltu järjestyksessä.

elementit käsitellään ainutlaatuisina niiden sijainnin, Ei niiden arvon perusteella. Joten jos tuloelementit ovat ainutlaatuisia, syntyy combinationswill myös ainutlaatuinen.,

vastaa Karkeasti:

koodi combinations_with_replacement() voi olla myös ilmaisi asa alasekvenssi product() suodatuksen jälkeen merkinnät, joissa elementsare ole lajiteltu järjestyksessä (sen mukaan, mikä niiden asema tulo-allas):

useita kohteita palasi on (n+r-1)! / r! / (n-1)!, kun n > 0.

uusi versiossa 3.1.,

itertools.compress(tiedot, valitsimet)¶

Tee iteraattorin, joka suodattaa elementtejä tietoja palauttamalla vain ne thathave vastaava elementti valitsimet, jonka arvo True.Pysähtyy, kun joko data tai valitsimet iterables on käytetty loppuun.Suurin piirtein:

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

Uutta versiossa 3.1.

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

Tee iterator, joka palauttaa tasaisesti arvot alkaen useita alku., Oftenused argumenttina map() tuottaa peräkkäisen tietojen pistettä.Käytetään myös zip(): n kanssa sekvenssinumeroiden lisäämiseen. Suurin piirtein:

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

Kun laskenta liukulukuja, parempi tarkkuus voi joskus saavuttaa korvaamalla kertova koodi, esimerkiksi: (start + step * ifor i in count()).

muutettu versiossa 3.1: lisätty vaiheargumentti ja sallittu ei-kokonaisluku-argumentit.,

itertools.cycle(iterable)¶

Tee iteraattorin palaamassa elementtejä iterable ja kopion tallentaminen kustakin.Kun iteroitava on käytetty loppuun, palauta elementit tallennetusta kopiosta. Toistan vain. Suurin piirtein:

Huom, tämä jäsen toolkit voi vaatia merkittäviä ylimääräisiä varastointi(riippuen pituus iterable).,

itertools.dropwhile(predikaatti, iterable)¶

Tee iteraattorin, joka laskee elementtejä iterable niin kauan kuin predicateis totta; jälkeenpäin, palauttaa jokaisen elementin. Huomaa, iteraattori ei tuotteeistaa ulostuloa ennen kuin predikaatti muuttuu ensin vääräksi, joten sillä voi olla pituuskäynnistysaika. Suurin piirtein:

itertools.filterfalse(predikaatti, iterable)¶

Tee iteraattorin, joka suodattaa elementtejä iterable palaa vain ne, joista predikaatti on False., Jos predikaatti on None, palauta väärät itemsat. Suurin piirtein:

itertools.groupby(iterable, avain=Ei mitään)¶

Tee iterator, joka palauttaa peräkkäisen avaimet ja ryhmien iterable.Avain on funktio, joka laskee kunkin elementin avainarvon. Jos notspecified tai ei None keskeiset oletukset on identiteetti funktio ja returnsthe elementti ennallaan. Yleensä iteroitavat on jo lajiteltava samalle avaintoiminnolle.,

toiminta groupby() muistuttaa uniq suodatin Unix. Itgenerates tauko tai uusi ryhmä joka kerta arvo avaintoiminto muuttuu(minkä vuoksi on yleensä tarpeen lajitella tiedot käyttäen samaa avaintoiminto). Tämä käyttäytyminen eroaa SQL: n ryhmästä, jolla aggregoidaan yhteisiä elementtejä riippumatta niiden syöttöjärjestyksestä.

palautettu ryhmä on itse iteraattori, joka jakaa kohde-etuutena olevan iteraattorin groupby()., Koska lähde on jaettu, kun groupby()kohde on tarkennettu, edellinen ryhmä ei ole enää näkyvissä. Joten, jos tiedot tarvitaan myöhemmin, se tulee säilyttää, koska lista:

groupby() vastaa karkeasti:

itertools.islice(iterable, lopettaa)¶itertools.islice(iterable, aloita, lopeta)

Tee iterator, joka palauttaa valitun elementtejä iterable. Jos start isnon-zero, sitten elementtejä iterable ohitetaan, kunnes alkaa on saavutettu.,Jälkeenpäin elementit palautetaan peräkkäin, ellei askelta aseteta korkeammalle kuin mikä johtaa kohteita ohitetaan. Jos pysäkki on None, niin iterationcontinues kunnes iteraattori on käytetty loppuun, jos ollenkaan, muuten se pysähtyy thespecified asentoon. Toisin kuin säännöllinen viipalointi, islice() ei tue start, stop tai step-arvoja. Voidaan poimia relatedfields tiedoista, joissa sisäinen rakenne on litistetty (esimerkiksi amulti-line raportti voi sisältää nimi-kenttä joka kolmas linja)., Suurin piirtein:

Jos alku on None, niin iteraatio alkaa nollasta. Jos vaihe on None, niin askel oletusarvo on yksi.

itertools.permutations(iterable, r=Ei mitään)¶

Paluu peräkkäisten r pituus permutaatiot elementtejä iterable.

Jos r ei ole määritetty tai se on None, niin r on oletusarvoisesti lengthof, että iterable ja kaikki mahdolliset koko-pituus permutationsare syntyy.

permutaatio tuplat tuotetaan sanakirjojen tilaamisen mukaan tothe jotta input iterable., Joten, jos tulo iterable on lajiteltu, yhdistelmä tuples tuotetaan lajiteltu järjestyksessä.

elementit käsitellään ainutlaatuisina niiden sijainnin, Ei niiden arvon perusteella. Joten jos tuloelementit ovat ainutlaatuisia, ei ole toistoja kussakin permutation.,

vastaa Karkeasti:

koodi permutations() voi olla myös ilmaistu alasekvenssiproduct(), suodatetaan pois merkinnät toistuvat elementit (thosefrom samaan asentoon syöttö-allas):

useita kohteita palasi on n! / (n-r)!, kun 0 <= r <= ntai nolla, kun r > n.

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

Karteesinen tuote input iterables.,

sisäkkäiset silmukat kiertävät kuin matkamittarin, jonka oikeanpuoleisin Elementti etenee joka iteraatiolla. Tämä malli luo sanakirjojen tilaaminen niin, että jos tulo on iterables lajitellaan, tuote tuplat tuotetaan sortedorder.

laskea tuote iterable itsensä kanssa, määritä numero ofrepetitions lisävarusteena toista avainsanan argumentti. Esimerkiksiproduct(A, repeat=4) tarkoittaa samaa kuin product(A, A, A, A).,

Tämä toiminto on suurin piirtein seuraava koodi, paitsi että theactual täytäntöönpano ei rakentaa välitulokset muistiin:

Ennen product() toimii, se täysin kuluttaa input iterables,pitää altaat arvot muistiin tuottaa tuotteita. Näin ollen se on hyödyllinen vain rajallinen tuloa.

itertools.repeat(objekti)¶

Tee iterator, joka palauttaa objektin uudestaan ja uudestaan. Kulkee epämääräisesti kertaa argumentti on määritelty., Käytetään argumenttina map() forinvarianttiparametreille kutsutulle funktiolle. Myös käyttää zip() luoda invariant osa monikko ennätys.

vastaa Karkeasti:

yhteinen käyttää toista on toimittaa virta vakio arvot mapor zip:

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

itertools.starmap(toiminto, iterable)¶

Tee iteraattorin, joka laskee funktion argumentteja saadaan tarkasteltavien iterable., Käyttää sijasta map() kun argumentti parametrit ovat alreadygrouped vuonna tuplat yhdestä iterable (tiedot on ”pre-zip”). Thedifference välillä map() ja starmap() yhtäläisyyksiä distinctionbetween function(a,b) ja function(*c). Suurin piirtein:

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

itertools.takewhile(predikaatti, iterable)¶

Tee iterator, joka palauttaa elementtejä iterable niin kauan kuin thepredicate on totta., Suurin piirtein:

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

Paluu n: n riippumattoman iteraattorit yhdestä iterable.

seuraavat Python-koodi auttaa selittämään, mitä ei tee (vaikka tosiasiallinen täytäntöönpano on monimutkaisempi ja käyttää vain yhden underlyingFIFO jono).

vastaa Karkeasti:

Kun tee() on tehty split, alkuperäinen iterable ei pitäisi käyttää missään muualla; muuten, iterable voisi saada advanced ilman t-esineitä on ilmoitettu.,

tee iteraattorit eivät ole threadsafe. RuntimeError voi beraised käytettäessä samanaikaisesti iteraattorit palautetaan samalla tee()soittaa, vaikka alkuperäinen iterable on threadsafe.

tämä itertool saattaa vaatia merkittävää lisävarastointia (riippuen siitä, miten väliaikaiset tiedot on tallennettava). Yleensä, jos yksi iteraattori usesmost tai kaikki tiedot, ennen kuin toinen iteraattori alkaa, se on nopeampi käyttäälist() sijaan tee().,

itertools.zip_longest(*iterables, fillvalue=Ei mitään)¶

Tee iteraattorin, joka kokoaa elementit kustakin iterables. Jos theiterables ovat epätasainen pituus, puuttuvat arvot täytetään-in fillvalue.Iterointi jatkuu, kunnes pisin toistettava on loppu. Suurin piirtein:

Jos yksi iterables on potentiaalisesti ääretön, niin zip_longest()toiminto olisi kääritty jotain, joka rajoittaa puhelujen määrä(esimerkiksi islice() tai takewhile())., Jos ei ole määritelty, fillvalue-oletusarvo on None.