Я хотел бы знать, безопасно ли (задокументированное поведение?) Удалять доменное пространство итератора при выполнении в 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' - это то, что я называю 'доменным пространством итератора' (если есть более подходящее слово / фраза, позвольте мне знать).
Что я делаю, это удаляю значения из него, пока итератор '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 делать подобные вещи?