我同意 John Fouhy 关于休息条件的看法。正如 Chris Jester-Young 所建议的,遍历列表的副本适用于 remove() 方法。但是,如果需要 pop() 特定项目,则反向迭代可以工作,正如 Erik 所提到的,在这种情况下,操作可以就地完成。例如:
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)