Я согласен с Джоном Фухи в отношении условия разрыва. Обход копии списка работает для метода remove (), как предложил Крис Джестер-Янг. Но если нужно использовать pop () определенных элементов, то, как упоминал Эрик, итерация в обратном порядке работает, и в этом случае операция может быть выполнена на месте. Например:
def r_enumerate(iterable):
"""enumerator for reverse iteration of an iterable"""
enum = enumerate(reversed(iterable))
last = len(iterable)-1
return ((last - i, x) for i,x in enum)
x = [1,2,3,4,5]
y = []
for i,v in r_enumerate(x):
if v != 3:
y.append(x.pop(i))
print 'i=%d, v=%d, x=%s, y=%s' %(i,v,x,y)
или с помощью xrange:
x = [1,2,3,4,5]
y = []
for i in xrange(len(x)-1,-1,-1):
if x[i] != 3:
y.append(x.pop(i))
print 'i=%d, x=%s, y=%s' %(i,x,y)