Je voulais savoir s'il est sûr (comportement documenté?) De supprimer l'espace de domaine d'un itérateur en exécution en Python.Est-il sûr (comportement documenté?) De supprimer le domaine d'un itérateur en cours d'exécution
Tenir compte du code:
import os
import sys
sampleSpace = [ x*x for x in range(7) ]
print sampleSpace
for dx in sampleSpace:
print str(dx)
if dx == 1:
del sampleSpace[ 1 ]
del sampleSpace[ 3 ]
elif dx == 25:
del sampleSpace[ -1 ]
print sampleSpace
« sampleSpace » est ce que j'appelle « l'espace de domaine d'un itérateur » (s'il y a un mot plus approprié/phrase, laissez-moi savoir). Ce que je fais est de supprimer des valeurs pendant que l'itérateur 'dx' le parcourt.
Voici ce que je pense du code:
Iteration versus element being pointed to (*):
0: [*0, 1, 4, 9, 16, 25, 36]
1: [0, *1, 4, 9, 16, 25, 36] (delete 2nd and 5th element after this iteration)
2: [0, 4, *9, 25, 36]
3: [0, 4, 9, *25, 36] (delete -1th element after this iteration)
4: [0, 4, 9, 25*] (as the iterator points to nothing/end of list, the loop terminates)
.. et voici ce que je reçois:
[0, 1, 4, 9, 16, 25, 36]
0
1
9
25
[0, 4, 9, 25]
Comme vous pouvez le voir - ce que je pense est ce que je reçois - est contraire au comportement que j'ai eu d'autres langues dans un tel scénario. Par conséquent - Je voulais vous demander s'il existe une règle comme "l'itérateur devient invalide si vous mutez son espace pendant l'itération" en Python?
Est-ce sûr (comportement documenté?) En Python de faire des choses comme ça?
Aha! C'est ce que je cherchais. Après avoir lu ce texte, je dirais, dans mon sens du mot, que l'opération est * pas sûre * – PoorLuzer
Marquer la vôtre comme la réponse car elle a directement répondu à ma question. SilentGhost est plus détaillé et riche en exemples. – PoorLuzer
Parce que le comportement n'est pas défini par le langage Python, le résultat est libre de changer entre différentes implémentations, ou même des versions différentes de la même implémentation –