Itertool funkce¶
následující funkce modulu všechny postavit a vrátit iterátory. Některé poskytovanéstreamy nekonečné délky, takže by měly být přístupné pouze funkcemi nebosmyčky, které zkracují proud.
itertools.
accumulate
(iterable)¶
Vytvořit iterátor, který vrací nahromaděné částky, nebo accumulatedresults dalších binární funkce (zadané přes optionalfunc argument).,
Pokud je dodáván func, měla by to být funkcedvě argumenty. Prvky vstupu iterable může být jakýkoliv typto může být přijata jako argumenty func. (Například, s výchozí operace sčítání, prvky mohou být jakékoliv addabletype včetně Decimal
neboFraction
.)
obvykle se počet výstupních prvků shoduje se vstupním iterovatelným.Pokud je však zadán počáteční argument klíčového slova, pakakumulace vede s počáteční hodnotou tak, že výstupmá ještě jeden prvek, než je vstup iterable.,
zhruba odpovídá:
existuje řada použití pro argument func. To může být nastaven namin()
pro běh minimální, max()
pro běh maximální, nebooperator.mul()
pro chod produktu. Tabulky amortizace mohou býtpostavené hromaděním úroků a uplatňováním plateb. První-orderrecurrence relationscan být modelovány zadáním počáteční hodnoty v iterable a pomocí pouze celková v func argument:
functools.reduce()
pro podobné funkce, která vrací pouze žáci, nahromaděné hodnoty.,
novinka ve verzi 3.2.
změněno ve verzi 3.3: přidán volitelný parametr func.
změněno ve verzi 3.8: přidán volitelný počáteční parametr.
itertools.
chain
(*iterables)¶
Vytvořit iterátor, který vrací prvky z první iterable, dokud to isexhausted, pak pokračuje na další iterable, dokud všechny iterables areexhausted. Používá se k léčbě po sobě jdoucích sekvencí jako jediné sekvence.,Zhruba odpovídá:
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)¶
Alternativní konstruktor pro chain()
. Získá zřetězené vstupy z asingle iterable argumentu, který je hodnocen líně. Zhruba odpovídá:
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)¶
Návrat r délka subsequences prvky ze vstupního iterable.,
kombinované tuply jsou emitovány v lexikografickém uspořádání podle pořadí vstupu, který je iterovatelný. Takže, pokud vstupní iterable je řazena,kombinace n-tic se bude vyrábět v seřazeném pořadí.
prvky jsou považovány za jedinečné na základě jejich polohy, nikoli na jejichhodnota. Takže pokud jsou vstupní prvky jedinečné, v každé kombinaci nebudou žádné opakováníhodnoty.,
Zhruba odpovídá:
kód combinations()
může být také vyjádřena jako subsequenceof permutations()
po filtrování záznamů, kde jsou prvky v seřazeném pořadí (v závislosti na jejich pozici ve vstupním bazénu):
počet vrácených položek je n! / r! / (n-r)!
0 <= r <= n
nebo nulu, když r > n
.,
itertools.
combinations_with_replacement
(iterable, r)¶
Návrat r délka subsequences prvky ze vstupního iterableallowing jednotlivé prvky, které mají být opakován více než jednou.
kombinované tuply jsou emitovány v lexikografickém uspořádání podle pořadí vstupu, který je iterovatelný. Takže, pokud vstupní iterable je řazena,kombinace n-tic se bude vyrábět v seřazeném pořadí.
prvky jsou považovány za jedinečné na základě jejich polohy, nikoli na jejichhodnota. Takže pokud jsou vstupní prvky jedinečné, generované kombinacebude také jedinečný.,
Zhruba odpovídá:
kód combinations_with_replacement()
může být také vyjádřena asa podposloupnost product()
po filtrování záznamů, kde elementsare není v seřazeném pořadí (v závislosti na jejich pozici ve vstupním bazénu):
počet vrácených položek je (n+r-1)! / r! / (n-1)!
n > 0
.
novinka ve verzi 3.1.,
itertools.
compress
(data, selektory)¶
Vytvořit iterátor, který filtruje prvky od data vrací pouze ty, které mají odpovídající prvek v selektory, které se vyhodnotí na True
.Zastaví se, když jsou data nebo selektory iterables vyčerpány.Zhruba odpovídá:
def compress(data, selectors): # compress('ABCDEF', ) --> A C E F return (d for d, s in zip(data, selectors) if s)
novinka ve verzi 3.1.
itertools.
count
(start=0, krok=1)¶
Vytvořit iterátor, který vrací rovnoměrně rozložené hodnoty, startovní číslo start., Často se používá jako argument promap()
pro generování po sobě jdoucích datových bodů.Také se používá s zip()
pro přidání pořadových čísel. Zhruba odpovídá:
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
Při počítání s plovoucí desetinnou čárkou, lepší přesnost může být někdy dosaženo nahrazením multiplikativní kódu, např.: (start + step * ifor i in count())
.
změněno ve verzi 3.1: přidán krokový argument a povolené neceločíselné argumenty.,
itertools.
cycle
(iterable)¶
Vytvořit iterátor vracející prvky z iterable a uložení kopie každého z nich.Když je iterovatelný vyčerpán, vraťte prvky z uložené kopie. Opakujerozhodně. Zhruba ekvivalentní:
Poznámka, tento člen sady nástrojů může vyžadovat významné pomocné úložiště (v závislosti na délce iterable).,
itertools.
dropwhile
(predikát, iterovatelný)¶
Vytvořte iterátor, který upustí prvky z iterable, pokud je predikát pravdivý; poté vrátí každý prvek. Všimněte si, že iterátor nevytváříjakýkoli výstup, dokud se predikát nejprve nestane falešným,takže může mít délku. Zhruba odpovídá:
itertools.
filterfalse
(predikát, iterable)¶
Vytvořit iterátor, který filtruje prvky z iterable vrací pouze ty, prokterý predikát je False
., Pokud je predikát None
, vraťte položkykteré jsou nepravdivé. Zhruba odpovídá:
itertools.
groupby
(iterable, key=None)¶
Vytvořit iterátor, který vrací po sobě jdoucích klíčů a skupin z iterable.Klíč je funkce výpočetní hodnotu klíče pro každý prvek. Pokud není specifikováno nebo je None
, klíč je výchozí pro funkci identity a vrací prvek beze změny. Obecně platí, že iterovatelný musí být již tříděnstejnou funkci klíče.,
operace groupby()
je podobná filtru uniq
v Unixu. Pokaždé, když se změní hodnota funkce klíče(proto je obvykle nutné třídit data pomocí stejné funkce klíče), je třeba provést přestávku nebo novou skupinu. Toto chování se liší od skupiny SQL, kterou agreguje společnéprvky bez ohledu na jejich vstupní pořadí.
vrácená skupina je sama o sobě iterátorem, který sdílí základní iterablewith groupby()
., Protože je zdroj sdílen, když je objektgroupby()
pokročilý, předchozí skupina již není viditelná. Takže, v případě, že data potřebná později, by měly být uloženy jako seznam:
groupby()
je zhruba ekvivalentní:
itertools.
islice
(iterable, zastavit)¶itertools.
islice
(iterable, start, stop)
Vytvořit iterátor, který vrací vybrané prvky z iterable. Pokud start isnon-zero, pak prvky z iterable jsou přeskočeny, dokud není dosaženo startu.,Poté jsou prvky vráceny postupně, pokud není krok nastaven výše nežjeden, což vede k přeskočení položek. Pokud je stop None
, pak iteracepokračuje, dokud není iterátor vyčerpán, pokud vůbec; v opačném případě se zastaví v téže poloze. Na rozdíl od běžného krájení islice()
nepodporujenegativní hodnoty pro start, stop nebo krok. Lze použít k extrahování souvisejícípole z dat, kde byla vnitřní struktura zploštělá (například zpráva amulti-line může uvést pole názvu na každém třetím řádku)., Zhruba odpovídá:
je-li start None
, iterace začíná na nule. Pokud je krok None
, pak krok výchozí na jednu.
itertools.
permutations
(iterable, r=None)¶
Návrat po sobě jdoucích r délka permutace prvků v iterable.
Pokud r není uvedeno nebo je None
, pak r výchozí délka je iterable a všechny možné full-délka permutationsare generovány.
permutační tuply jsou emitovány v lexikografickém uspořádání podle pořadí vstupu iterovatelného., Takže, pokud vstupní iterable je řazena,kombinace n-tic se bude vyrábět v seřazeném pořadí.
prvky jsou považovány za jedinečné na základě jejich polohy, nikoli na jejichhodnota. Takže pokud jsou vstupní prvky jedinečné, v každé permutaci nebudou žádné opakováníhodnoty.,
Zhruba odpovídá:
kód permutations()
může být také vyjádřena jako podposloupnostproduct()
, vyřadit položky s opakovanými prvky (thosefrom stejné pozici ve vstupním bazénu):
počet vrácených položek je n! / (n-r)!
0 <= r <= n
nebo nulu, když r > n
.
itertools.
product
(*iterables, opakovat=1)¶
Kartézský součin vstupních iterables.,
cyklus vnořených smyček jako počítadlo kilometrů s nejvzdálenějším prvkem postupujícím při každé iteraci. Tento vzor vytváří lexikografické uspořádání tak, že pokud jsou iterabily vstupu seřazeny, produktové tuply jsou emitovány v sortedorder.
Chcete-li vypočítat produkt iterable s sebou, zadejte počet opakování s volitelným argumentem opakovaného klíčového slova. Napříkladproduct(A, repeat=4)
znamená totéž jako product(A, A, A, A)
.,
Tato funkce je zhruba ekvivalentní následující kód, kromě toho, že skutečná realizace není vybudování průběžných výsledků v paměti:
Před product()
běží, to zcela spotřebuje vstupní iterables,udržování bazénů hodnot v paměti pro generování výrobků. Proto je užitečné pouze u konečných vstupů.
itertools.
repeat
(objekt)¶
Vytvořit iterátor, který vrací objekt znovu a znovu. Běží nedefinovaněneméně je zadán argument times., Používá se jako argument promap()
forinvariant parametry k volané funkci. Používá se také s zip()
vytvořit invariantní část záznamu n-tice.
Zhruba odpovídá:
společné použití pro opakování je, aby dodávky proudu konstantní hodnoty mapor zip:
>>> list(map(pow, range(10), repeat(2)))
itertools.
starmap
(funkce, iterable)¶
Vytvořit iterátor, který počítá funkci pomocí argumentů získaných z iterable., Použít místo map()
když argument parametry jsou alreadygrouped v n-tice z jedné iterable (data byla „pre-zip“). Si rozdílu mezi map()
starmap()
paralely distinctionbetween function(a,b)
function(*c)
. Zhruba odpovídá:
def starmap(function, iterable): # starmap(pow, ) --> 32 9 1000 for args in iterable: yield function(*args)
itertools.
takewhile
(predikát, iterable)¶
Vytvořit iterátor, který vrací prvky z iterable tak dlouho, jak thepredicate je pravda., Zhruba odpovídá:
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)¶
Návrat n nezávislých iterátory z jednoho iterable.
následující Python kód pomáhá vysvětlit, co tee dělá (i když vlastní je složitější a používá pouze jeden underlyingFIFO fronty).
Zhruba odpovídá:
Jednou tee()
učinil split, původní iterable by neměly být použity kdekoliv jinde, jinak, iterable mohl získat pokročilé bez tee objektů, je o ní informován.,
tee
iterátory nejsou threadsafe. RuntimeError
může zvýšit při použití současně iterátory vrací stejné tee()
hovor, i když původní iterable je threadsafe.
Tento itertool může vyžadovat významné pomocné úložiště (v závislosti na tom, jakmnoho dočasných dat musí být uložena). Obecně platí, že pokud jeden iterátor usesmost nebo všechna data před další iterátor začne, je rychlejší použítlist()
místo tee()
.,
itertools.
zip_longest
(*iterables, fillvalue=None)¶
Vytvořit iterátor, který agreguje prvky z každé z iterables. Pokud jsou tyto hodnoty nerovnoměrné, chybějící hodnoty jsou vyplněny výplní.Iterace pokračuje až do vyčerpání nejdelšího iterable. Zhruba odpovídá:
Pokud jeden z iterables je potenciálně nekonečný, pak zip_longest()
funkce by měla být zabalené s něčím, co omezuje počet hovorů(například islice()
nebo takewhile()
)., Pokud není zadáno,fillvalue defaults to None
.