iter() și next() în Python

iter() obține un iterator dintr-o colecție; next() ia următorul element din iterator.

Sintaxă
iter(iterabil)
iter(functie, santinela)
next(iterator[, implicit])

Ce face iter() și next()

Bucla for folosește în spate aceste două funcții: cere un iterator cu iter() și ia elementele cu next() până când apare StopIteration. Le poți folosi și direct, de exemplu pentru a lua doar primul element sau pentru a sări peste antetul unui fișier.

next(iterator, implicit) returnează implicit în loc să arunce StopIteration când nu mai sunt elemente. Forma iter(functie, santinela) apelează funcția repetat până când rezultatul este egal cu santinela.

Parametri

Parametru Descriere
iterabil O colecție sau orice obiect care poate fi parcurs.
functie, santinela Forma a doua a lui iter(): o funcție fără argumente și valoarea la care se oprește.
iterator Iteratorul din care next() ia elementul.
implicit Opțional. Valoarea returnată de next() când iteratorul s-a terminat.

Ce returnează

iter(): un iterator. next(): următorul element.

Exemple

Exemplul 1: Pas cu pas

it = iter(["a", "b"])
print(next(it))
print(next(it))
print(next(it, "gata"))
try:
    next(it)
except StopIteration:
    print("StopIteration")

Rezultat

a
b
gata
StopIteration

Exemplul 2: Primul element care îndeplinește o condiție

note = [6, 8, 10, 9]
prima_maxima = next((i for i, n in enumerate(note) if n == 10), None)
print(prima_maxima)
print(next((n for n in note if n > 10), "niciuna"))

Rezultat

2
niciuna

Exemplul 3: Sărirea peste antet

randuri = iter(["nume,oras", "Ana,Iași", "Mihai,Cluj"])
antet = next(randuri)
print("Antet:", antet)
for rand in randuri:
    print(rand.split(","))

Rezultat

Antet: nume,oras
['Ana', 'Iași']
['Mihai', 'Cluj']

Greșeli frecvente

  • Apelezi next() direct pe o listă: next([1, 2]) dă TypeError: 'list' object is not an iterator. Obține întâi iteratorul cu iter().

Comenzi înrudite

  • yield (generatoare): Transformă o funcție într-un generator, care produce valorile una câte una, la cerere.
  • for: Parcurge, pe rând, fiecare element dintr-o listă, text, dicționar sau alt obiect iterabil.
  • itertools.islice(): Ia o „felie” dintr-un iterator sau generator, ca [start:stop:pas] la liste.
  • async / await: Scrie cod asincron: funcții care pot aștepta (rețea, fișiere, temporizări) fără să blocheze restul programului.