Je veux créer une fonction qui ajoute des éléments à la liste. Je veux que ça s'arrête quand il s'agit de border of range () J'ai obtenu ceci:
>>> i = iter(range(10)) >>> get_values(i, 3) [0, 1, 2] >>> get_values(i, 5) [3, 4, 5, 6, 7] >>> get_values(i, 4) [8, 9] >>> get_values(i, 4) []
Mais je veux réaliser ceci:
def get_values(i,n): d =[] for x in range(n): d.append(next(i)) return d i = iter(range(10)) print((get_values(i,5))) print((get_values(i,4))) print((get_values(i,2))) It gives me: [0, 1, 2, 3, 4] [5, 6, 7, 8] Traceback (most recent call last): File "/Users/user/Documents/untitled1/lol.py", line 17, in <module> print((get_values(i,2))) File "/Users/user/Documents/untitled1/lol.py", line 4, in get_values d.append(next(i)) StopIteration
Comment puis-je contrôler la boucle pour ne mettre que des éléments de range () of i?
3 Réponses :
écoutez simplement l'erreur et arrêtez l'itération lorsqu'il y a une erreur et sortez de la boucle:
def get_values(i,n): d =[] for x in range(n): try: d.append(next(i)) except StopIteration: break return d
La seule façon de vérifier si vous pouvez continuer est d'écouter l'exception StopIteration
. Voici une autre solution que je pensais utile:
def get_values(i, n): d = [] try: for _ in range(n): d.append(next(i)) finally: return d
Recherchez https://www.geeksforgeeks.org/python-next-method/ pour en savoir plus sur les arguments que vous pouvez passer à l'instruction suivante
[0, 1, 2, 3, 4] [5, 6, 7, 8] [9]
Production
def get_values(i,n): d =[] for x in range(n): temp=next(i,'end') if temp=="end": break d.append(temp) return d i = iter(range(10)) print((get_values(i,5))) print((get_values(i,4))) print((get_values(i,2)))
bien qu'espérez-vous qu'il se passe s'il y a une erreur ? Quoi qu'il en soit, ici, vous pouvez simplement gérer l'erreur en général, avec un
try - except StopIteration
, et gérer cela comme vous le souhaitez (générer une autre erreur, terminer simplement la fonction, etc.). Notez, ici, vous réinventez fondamentalementitertools.islice
et vous pouvez simplement l'utiliser, c'est-à-direlist(itertools.islice(i, 5))
ou autre