Pythonで実行中のイテレータのドメインスペースを削除しても安全かどうか(文書化された動作?)を知りたいと思いました。
コードを考えてみましょう:
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」は、私が「イテレータのドメイン空間」と呼んでいるものです(より適切な単語/フレーズがある場合は、lemme know)。
私がやっていることは、イテレータ'dx'が実行されている間に値を削除することです。
これが私がコードに期待することです:
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 )
..そしてこれが私が得るものです:
[0, 1, 4, 9, 16, 25, 36]
0
1
9
25
[0, 4, 9, 25]
ご覧のとおり、私が期待しているのは私が得たものです。これは、このようなシナリオで他の言語から得た動作とは逆です。
したがって、Pythonで「反復中にスペースを変更するとイテレータが無効になる」などのルールがあるかどうかを尋ねたいと思います。
Pythonでこのようなことをするのは安全ですか(文書化された動作?)?