你始终可以遍历列表的副本,从而可以自由修改原始列表:
for item in list(somelist):
...
somelist.remove(item)
为了满足这些条件:修改原位最初的名单,没有列表的副本,只有一通,工程,传统的解决方案是迭代向后:
for i in xrange(len(somelist) - 1, -1, -1):
element = somelist[i]
do_action(element)
if check(element):
del somelist[i]
奖励:并非len(somelist)
在每次迭代中都执行。适用于任何版本的Python(至少可追溯到1.5.2)... s / xrange / range / for3.X
。
更新:如果要迭代转发,则可能会更加棘手和丑陋:
i = 0
n = len(somelist)
while i < n:
element = somelist[i]
do_action(element)
if check(element):
del somelist[i]
n = n - 1
else:
i = i + 1