Funzioni Itertool¶

Le seguenti funzioni del modulo costruiscono e restituiscono tutti gli iteratori. Alcuni providestream di lunghezza infinita, quindi dovrebbero essere accessibili solo da funzioni o ops che troncano il flusso.

itertools.accumulate(iterabile)¶

Crea un iteratore che restituisce somme accumulate o risultati accumulati di altre funzioni binarie (specificate tramite l’argomento optionalfunc).,

Se viene fornito func, dovrebbe essere una funzione di due argomenti. Gli elementi dell’input iterabile possono essere di qualsiasi tipoche possono essere accettati come argomenti per func. (Ad esempio, con l’operazione predefinita di addition, gli elementi possono essere qualsiasi tipo di addabletype incluso Decimal oFraction.)

Di solito, il numero di elementi di output corrisponde all’input iterabile.Tuttavia, se viene fornito l’argomento iniziale della parola chiave, theaccumulation si interrompe con il valore iniziale in modo che l’outputhas abbia un elemento in più rispetto all’input iterabile.,

Approssimativamente equivalente a:

Ci sono un certo numero di usi per l’argomento func. Può essere impostato su min() per un minimo in esecuzione, max() per un massimo in esecuzione, ooperator.mul() per un prodotto in esecuzione. Le tabelle di ammortamento possono esserecostruito accumulando interessi e applicando pagamenti. First-orderrecurrence relationscan be modeled by providing the initial value in the iterable and using onlythe accumulated total in func argument:

See functools.reduce() for a similar function that returns only thefinal accumulated value.,

Nuovo nella versione 3.2.

Cambiato nella versione 3.3: Aggiunto il parametro opzionale func.

Cambiato nella versione 3.8: Aggiunto il parametro iniziale opzionale.

itertools.chain(*iterables)¶

Crea un iteratore che restituisce elementi dal primo iterabile fino a quando non è esaurito, quindi procede al successivo iterabile, fino a quando tutti gli iterabili non sono esauriti. Utilizzato per il trattamento di sequenze consecutive come una singola sequenza.,Approssimativamente equivalente a:

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

Alternativo costruttore chain(). Ottiene input concatenati da un argomento iterabile asingle che viene valutato pigramente. Approssimativamente equivalente a:

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

Restituisce le sottosequenze di lunghezza r degli elementi dall’input iterabile.,

Le tuple combinate vengono emesse in ordine lessicografico secondo l’ordine dell’input iterabile. Quindi,se l’input iterabile è ordinato, le tuple di combinazione verranno prodotte in ordine ordinato.

Gli elementi sono trattati come unici in base alla loro posizione, non al loro valore. Quindi, se gli elementi di input sono unici, non ci saranno repeatvalues in ogni combinazione.,

all’Incirca equivalente a:

Il codice combinations() può essere anche espresso come subsequenceof permutations() dopo il filtraggio voci in cui gli elementi non sono delle ordinate secondo la loro posizione in ingresso piscina):

Il numero di elementi restituiti è n! / r! / (n-r)! quando 0 <= r <= no pari a zero, quando r > n.,

itertools.combinations_with_replacement(iterable, r)¶

Restituisce sottosequenze di lunghezza r di elementi dall’input iterableallowing singoli elementi da ripetere più di una volta.

Le tuple combinate vengono emesse in ordine lessicografico secondo l’ordine dell’input iterabile. Quindi,se l’input iterabile è ordinato, le tuple di combinazione verranno prodotte in ordine ordinato.

Gli elementi sono trattati come unici in base alla loro posizione, non al loro valore. Quindi, se gli elementi di input sono unici, anche le combinazioni generatesarà univoco.,

all’Incirca equivalente a:

Il codice combinations_with_replacement() può essere anche espresso asa sottosequenza di product() dopo il filtraggio voci in cui il elementsare non ordinati secondo la loro posizione in ingresso piscina):

Il numero di elementi restituiti è (n+r-1)! / r! / (n-1)! quando n > 0.

Nuovo nella versione 3.1.,

itertools.compress(data, selectors)¶

Crea un iteratore che filtra gli elementi dai dati restituendo solo quelli che hanno un elemento corrispondente nei selettori che valutaTrue.Si arresta quando i dati o selettori iterabili è stato esaurito.Approssimativamente equivalente a:

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

Nuovo nella versione 3.1.

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

Crea un iteratore che restituisca valori equidistanti che iniziano con il numero start., Spessousato come argomento permap() per generare punti dati consecutivi.Inoltre, utilizzato con zip() per aggiungere numeri di sequenza. Approssimativamente equivalente a:

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

Quando si conta con numeri in virgola mobile, a volte è possibile ottenere una migliore precisione sostituendo il codice moltiplicativo come: (start + step * ifor i in count()).

Cambiato nella versione 3.1: Aggiunto argomento passo e ammessi argomenti non interi.,

itertools.cycle(iterabile)¶

Crea un iteratore restituendo elementi dall’iterabile e salvando una copia di ciascuno.Quando l’iterabile è esaurito, restituire gli elementi dalla copia salvata. Repeatsindefinitely. Approssimativamente equivalente a:

Nota, questo membro del toolkit può richiedere una significativa memoria ausiliaria (a seconda della lunghezza dell’iterabile).,

itertools.dropwhile(predicato, iterabile)¶

Crea un iteratore che elimina gli elementi dall’iterabile finché il predicato è vero; in seguito, restituisce ogni elemento. Nota, l’iteratore non produce alcun output fino a quando il predicato non diventa false, quindi potrebbe avere un tempo di avvio prolungato. Approssimativamente equivalente a:

itertools.filterfalse(predicato, iterabile)¶

Crea un iteratore che filtra gli elementi da iterabile restituendo solo quelli per cui il predicato è False., Se predicato è None, restituire gli itemsthat sono false. Approssimativamente equivalente a:

itertools.groupby(iterable, key=None)¶

Crea un iteratore che restituisce chiavi e gruppi consecutivi dall’iterabile.La chiave è una funzione che calcola un valore chiave per ogni elemento. Se notspecified o è None, la chiave di default è una funzione di identità e restituisce l’elemento invariato. Generalmente, l’iterabile deve essere già ordinato sulla stessa funzione chiave.,

L’operazione di groupby() è simile al uniq filtro in Unix. Genera un’interruzione o un nuovo gruppo ogni volta che cambia il valore della funzione chiave(motivo per cui di solito è necessario ordinare i dati utilizzando la stessa funzione chiave). Questo comportamento differisce dal GRUPPO di SQL IN base al quale aggrega commonelements indipendentemente dal loro ordine di input.

Il gruppo restituito è esso stesso un iteratore che condivide l’iterablewith sottostantegroupby()., Poiché l’origine è condivisa, quando l’oggettogroupby()è avanzato, il gruppo precedente non è più visibile. Quindi, se quello che datais necessario in un secondo momento, dovrebbe essere archiviato come:

groupby() è equivalente a:

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

Crea un iteratore che restituisce gli elementi selezionati dal iterable. Se start non è zero, gli elementi dell’iterabile vengono ignorati fino al raggiungimento dell’inizio.,In seguito, gli elementi vengono restituiti consecutivamente a meno che il passaggio non sia impostato più in alto di uno, il che comporta che gli elementi vengano ignorati. Se stop è None, l’iterazionecontinua fino a quando l’iteratore non è esaurito, se non del tutto; altrimenti, si ferma alla posizione specificata. A differenza del normale slicing, islice() non supporta valori negativi per start, stop o step. Può essere utilizzato per estrarre relatedfields dai dati in cui la struttura interna è stata appiattita (ad esempio, il report amulti-line può elencare un campo name su ogni terza riga)., Approssimativamente equivalente a:

Se start è None, l’iterazione inizia da zero. Se il passo è None, il passo predefinito è uno.

itertools.permutations(iterable, r=None)¶

Restituisce successive permutazioni di lunghezza r di elementi nell’iterable.

Se r non è specificato o è None, r imposta di default la lunghezza delle permutazioni iterabili e tutte le possibili full-length sono generate.

Le tuple di permutazione sono emesse in ordine lessicografico secondo l’ordine dell’input iterabile., Quindi,se l’input iterabile è ordinato, le tuple di combinazione verranno prodotte in ordine ordinato.

Gli elementi sono trattati come unici in base alla loro posizione, non al loro valore. Quindi, se gli elementi di input sono unici, non ci saranno repeatvalues in ogni permutazione.,

all’Incirca equivalente a:

Il codice permutations() può essere anche espresso come una sottosequenza diproduct(), filtrato per escludere le voci con elementi ripetuti (thosefrom stessa posizione in ingresso piscina):

Il numero di elementi restituiti è n! / (n-r)! quando 0 <= r <= no pari a zero, quando r > n.

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

Prodotto cartesiano di iterables di input.,

I loop annidati ciclano come un contachilometri con l’elemento più a destra che avanza ad ogni iterazione. Questo modello crea un ordinamento lessicografico in modo che se gli iterabili dell’input sono ordinati, le tuple del prodotto vengono emesse in sortedorder.

Per calcolare il prodotto di un iterabile con se stesso, specificare il numero direpetizioni con l’argomento opzionale repeat keyword. Ad esempio,product(A, repeat=4) significa lo stesso di product(A, A, A, A).,

Questa funzione è approssimativamente equivalente al seguente codice, tranne che l’implementazione effettiva non genera risultati intermedi in memoria:

Prima di eseguireproduct(), consuma completamente gli iterabili di input,mantenendo pool di valori in memoria per generare i prodotti. Di conseguenza, è utile solo con input finiti.

itertools.repeat(object)¶

Crea un iteratore che restituisce l’oggetto più e più volte. Viene eseguito indefinitelyunless viene specificato l’argomento times., Utilizzato come argomento permap() per i parametri invarianti alla funzione chiamata. Utilizzato anche conzip() per creare una parte invariante di un record di tupla.

all’Incirca equivalente a:

Un uso comune per ripetere è quello di fornire un flusso costante di valori mapor zip:

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

itertools.starmap(funzione, iterable)¶

Crea un iteratore che calcola la funzione con argomenti ottenuti dal iterable., Usato al posto di map() quando i parametri degli argomenti sono già raggruppati in tuple da un singolo iterabile (i dati sono stati “pre-compressi”). La differenza tramap() estarmap() è parallela alla distinzione trafunction(a,b) efunction(*c). Approssimativamente equivalente a:

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

itertools. takewhile (predicato, iterabile)¶

Crea un iteratore che restituisce elementi dall’iterabile finché il predicato è vero., Approssimativamente equivalente a:

def takewhile(predicate, iterable): # takewhile(lambda x: x<5, ) --> 1 4 for x in iterable: if predicate(x): yield x else: break

itertools. tee (iterabile, n=2)¶

Restituisce n iteratori indipendenti da un singolo iterabile.

Il seguente codice Python aiuta a spiegare cosa fa tee (sebbene l’actualimplementation sia più complessa e usi solo una singola coda di underlyingFIFO).

Approssimativamente equivalente a:

Una volta chetee() ha fatto una divisione, l’iterabile originale non dovrebbe essere usato da nessun’altra parte; altrimenti, l’iterabile potrebbe essere avanzato senza che gli oggetti tee vengano informati.,

tee gli iteratori non sono al sicuro. Un RuntimeErrorpuò essere eseguito quando si utilizzano contemporaneamente iteratori restituiti dalla stessa chiamatatee(), anche se l’iterabile originale è protetto da thread.

Questo itertool può richiedere una significativa archiviazione ausiliaria (a seconda di come devono essere memorizzati molti dati temporanei). In generale, se un iteratore utilizza la maggior parte o tutti i dati prima dell’avvio di un altro iteratore, è più veloce utilizzarelist() invece di tee().,

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

Crea un iteratore che aggrega elementi da ciascuno degli iterabili. Se theiterables sono di lunghezza irregolare, i valori mancanti sono riempiti con fillvalue.L’iterazione continua fino a quando l’iterabile più lungo non è esaurito. Approssimativamente equivalente a:

Se uno degli iterabili è potenzialmente infinito, allora la funzionezip_longest()dovrebbe essere avvolta con qualcosa che limiti il numero di chiamate(ad esempioislice() otakewhile())., Se non specificato, il valore predefinito di fillvalue è None.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *