2
votes

Comment arrêter de placer des éléments dans la liste

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?


1 commentaires

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


3 Réponses :


1
votes

é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


0 commentaires

1
votes

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


0 commentaires

0
votes

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)))


0 commentaires