Je veux avoir une liste contenant les dix valeurs les plus récentes calculées dans un Cependant, je reçois cette erreur: p> Je ne sais pas pourquoi ceci est, comme le La liste est assez longue, assurée par la condition.
Merci pour tout conseil. P> p> pour code> boucle.
J'ai essayé de supprimer l'élément i-10 code> de la liste, puis appendez la valeur calculée dans le i'th code> itération. Voici ce que j'ai essayé:
6 Réponses :
Votre liste ne pousse jamais plus de 10 éléments, car dès qu'il passe à la longueur 10, vous commencez à supprimer le premier élément avant d'en ajouter un. Par conséquent, lorsque Vous ajoutez toujours à la fin de la liste, et logiquement seulement vouloir supprimer l'élément premier em>. Par conséquent, remplacez les points i code> est supérieur à 19, l'index I - 10 code> est hors de portée de la liste. del [i-10] code> par del points [0] code>: p>
Changer del Points [I - 10] code> à del Points [0] Code> Comme lorsque j'atteint 20, il essaie de supprimer l'index 10 qui n'existe pas. Alors changez-le à 0. p>
Bien sûr, vous avez un index hors de portée! Vous ne conservez que 10 articles dans la liste, mais Vous devez imaginer cela comme une file d'attente: une structure de données dans laquelle vous prenez des articles hors de l'avant et ajoutez-les à la fin. En fait, le package i code> jusqu'à 999! S'il n'y a que 10 éléments de la liste, comment imaginez-vous que vous pouvez indexer l'élément 998 - 10 code>? Collections code> a une telle structure de données. Toutefois, pour vos propres objectifs, faites ce que vous avez dit em> vous alliez faire: Débarrassez-vous du produit le plus ancien: P> [-971279100, -974224352, -977175552, -980132706, -983095820,
-986064900, -989039952, -992020982, -995007996, -998001000]
C'est ce que vous voulez:
points = []
x = 0
for i in range(1000):
x += 1
if i > 9: # to check when to start removing the first element
del points[0]
points.append(i * x * (1 - x)) # appending the value calculating
else:
points.append(i * x * (1 - x))
Qu'est-ce que cela ajoute aux réponses précédentes?
@Prune, peu importe si cela ajoute quelque chose ou non, cela m'aide à comprendre la solution de différentes perspectives et que la personne pose la question, c'est très utile pour moi.
@Prune, désolé, ma réponse a traversé l'autre dans l'éther.
Vous pouvez commencer par créer une liste de longueur 10, puis vélo simplement les indices. Pour extraire les valeurs, vous devrez extraire les tranches de Ce sera beaucoup plus efficace que la modification d'une liste, car la suppression du premier élément d'une liste a une complexité de temps O (n ). p> Si vous souhaitez la sortie sans index + 1 code> à la fin, puis à partir de l'index de début à code> (où index code> est l'index actuel de la liste des points, c'est-à-dire i% 10 code>). Aucun code> et que les éléments commandés du plus ancien au plus ancien, vous pouvez les imprimer comme ceci: p>
Pensez à ce qui se passe lorsque Cependant, une manière beaucoup plus efficace de cela consiste à utiliser Tranchement Pour toujours s'assurer que la liste n'est pas supérieure à 10 long: p> i code> est 100: vous essayez de supprimer l'élément dans Points [90] code> mais votre liste n'a que la longueur de 10 heures. d'erreur de portée. Vraiment, vous souhaitez supprimer le premier élément de la liste à chaque fois. De sorte que cette ligne devrait lire del points [0] code>. points = []
for i in range(1000):
x = i+1
points.append(i * x * (1 - x))
points = points[-10:]
Si vous mettez
impression (i) code> dans la boucle, vous verriez clairement qu'il échoue lorsquei code> = 20, et aurait probablement été en mesure de déterminer ce qui se passe mal.@alaniwi tu as raison, merci
Le module de collections intégré comprend DEQUE qui peut utiliser juste < Code> Points = DEQUE (MAXLEN = 10) CODE> ET AJOUVEL ajouté.