考虑:
fooList = [1, 2, 3, 4] # Ints for example only, in real application using objects
for foo in fooList:
if fooChecker(foo):
remove_this_foo_from_list
具体如何foo
从列表中删除?请注意,我仅使用整数作为示例,在实际应用程序中存在任意对象的列表。
谢谢。
迭代列表的浅表副本。
由于您无法在迭代时修改列表,因此您需要迭代列表的浅表副本。
fooList = [1, 2, 3, 4]
for foo in fooList[:]: #equivalent to list(fooList), but much faster
if fooChecker(foo):
fooList.remove(foo)
通常,您只是不想这样做。相反,请构建一个新列表。大多数情况下,这是通过列表理解完成的:
fooListFiltered = [foo for foo in fooList if not fooChecker(foo)]
或者,生成器表达式(我上面链接的视频涵盖生成器表达式以及列表推导)或filter()
(请注意,在 2.x 中,不是filter()
惰性的 - 使用生成器表达式或代替)可能更合适(例如,大文件太大而无法读入内存不会以这种方式工作,但可以使用生成器表达式)。itertools.ifilter()
如果您需要实际修改列表(很少见,但有时会出现这种情况),那么您可以分配回:
fooList[:] = fooListFiltered
使用filter
:
newList = list(filter(fooChecker, fooList))
或者
newItems = filter(fooChecker, fooList))
for item in newItems:
print item # or print(item) for python 3.x