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ștecollections.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.