itertools.count(), cycle() și repeat() în Python

Modulul itertools Python 3.0+

Iteratoare infinite: numărare fără sfârșit, repetarea ciclică a unei colecții, repetarea unei valori.

Sintaxă
itertools.count(start=0, step=1)
itertools.cycle(iterabil)
itertools.repeat(obiect[, times])

Ce face itertools.count(), cycle() și repeat()

count(start, step) produce start, start + step, … la nesfârșit (merge și cu numere zecimale). cycle(colectie) repetă elementele colecției în buclă. repeat(x, n) produce valoarea x de n ori, sau la infinit fără n.

Se combină de obicei cu zip(), islice() sau map(), care le opresc la un moment dat.

Parametri

Parametru Descriere
start, step Pentru count: primul număr și pasul.
iterabil Pentru cycle: elementele repetate.
obiect, times Pentru repeat: valoarea și numărul de repetări.

Ce returnează

Un iterator (infinit, cu excepția lui repeat cu times).

Exemple

Exemplul 1: Numerotare, alternanță și repetare

from itertools import count, cycle, repeat
for nr, nume in zip(count(101), ["Ana", "Dan", "Ioana"]):
    print(nr, nume)

culori = cycle(["alb", "gri"])
for rand in ["r1", "r2", "r3", "r4", "r5"]:
    print(rand, next(culori), end="; ")
print()
print(list(repeat("-", 5)))
print(list(map(pow, range(5), repeat(2))))

Rezultat

101 Ana
102 Dan
103 Ioana
r1 alb; r2 gri; r3 alb; r4 gri; r5 alb; 
['-', '-', '-', '-', '-']
[0, 1, 4, 9, 16]

Greșeli frecvente

  • Transformi direct în listă un iterator infinit: list(count()) nu se termină niciodată.

Comenzi înrudite