itertools.islice() în Python

Modulul itertools Python 3.0+

Ia o „felie” dintr-un iterator sau generator, ca [start:stop:pas] la liste.

Sintaxă
itertools.islice(iterabil, stop)
itertools.islice(iterabil, start, stop[, pas])

Ce face itertools.islice()

Generatoarele și fișierele nu suportă felii (gen[0:5] dă eroare). islice() le consumă element cu element și produce doar porțiunea cerută. Merge și pe generatoare infinite.

Valorile start, stop și pas nu pot fi negative. stop=None înseamnă până la final.

Parametri

Parametru Descriere
iterabil Sursa.
start, stop, pas Poziții ca la felii (doar nenegative).

Ce returnează

Un iterator.

Exemple

Exemplul 1: Primele elemente dintr-un generator infinit

from itertools import islice, count
patrate = (n * n for n in count(1))
print(list(islice(patrate, 5)))
print(list(islice("abcdefgh", 2, 7, 2)))

Rezultat

[1, 4, 9, 16, 25]
['c', 'e', 'g']

Exemplul 2: Primele rânduri dintr-un fișier

from itertools import islice
with open("jurnal.txt", "w", encoding="utf-8") as f:
    f.writelines(f"rândul {i}\n" for i in range(1, 101))
with open("jurnal.txt", encoding="utf-8") as f:
    for rand in islice(f, 3):
        print(rand.rstrip())

Rezultat

rândul 1
rândul 2
rândul 3

Greșeli frecvente

  • Dai un index negativ: islice(gen, -3, None) dă ValueError. Pentru ultimele N elemente folosește collections.deque(it, maxlen=N).

Comenzi înrudite

  • slice(): Creează un obiect „felie”, echivalentul lui [start:stop:pas], care poate fi salvat și refolosit.
  • itertools.count(), cycle() și repeat(): Iteratoare infinite: numărare fără sfârșit, repetarea ciclică a unei colecții, repetarea unei valori.
  • yield (generatoare): Transformă o funcție într-un generator, care produce valorile una câte una, la cerere.
  • collections.deque: Coadă cu două capete: adaugă și scoate rapid elemente atât la început, cât și la sfârșit.