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.isliceet vous pouvez simplement l'utiliser, c'est-à-direlist(itertools.islice(i, 5))ou autre