Comment obtenir une tranche d’un itérateur en Python

Vous voulez prendre une tranche de données produites par un itérateur, mais l’opérateur de découpage normal ne fonctionne pas. La fonction itertools.islice() est parfaitement adaptée pour prendre des tranches d’itérateurs et de générateurs. Par exemple:

>>> def compter(n):
...     while True:
...             yield n
...             n += 1
...
>>> c = compter(0)
>>> c[10:20]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'generator' object is not subscriptable

>>> # En utilisant islice()
>>> import itertools
>>> for x in itertools.islice(c, 10, 20):
...     print(x)
...
10
11
12
13
14
15
16
17
18
19
>>>

Les itérateurs et les générateurs ne peuvent normalement pas être coupés en tranches, car aucune information n’est connue sur leur longueur (et ils n’implémentent pas d’indexation).

Le résultat de la méthode islice() est un itérateur qui produit les éléments de tranche désirés, mais il le fait en consommant et en rejetant tous les éléments jusqu’à l’indice de tranche de départ.

D’autres éléments sont ensuite produits par l’objet islice jusqu’à ce que l’index final soit atteint.Il est important de souligner qu’islice() consommera les données sur l’itérateur fourni.

Comme les itérateurs ne peuvent pas être rembobinés, c’est quelque chose à considérer. S’il est important de revenir en arrière, vous devriez probablement d’abord transformer les données en une liste.

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here