2024-09-19 23:27:14 发布
网友
考虑:
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?请注意,我只使用int作为示例,在实际应用程序中有一个任意对象的列表。你知道吗
foo
谢谢。你知道吗
迭代列表的浅副本。你知道吗
因为迭代时不能修改列表,所以需要迭代列表的浅层副本。你知道吗
fooList = [1, 2, 3, 4] for foo in fooList[:]: #equivalent to list(fooList), but much faster if fooChecker(foo): fooList.remove(foo)
使用filter:
filter
newList = list(filter(fooChecker, fooList))
或者
newItems = filter(fooChecker, fooList)) for item in newItems: print item # or print(item) for python 3.x
http://docs.python.org/2/library/functions.html#filter
一般来说,你只是不想这么做。相反,构建一个新的列表。大多数情况下,这是通过list comprehension完成的:
fooListFiltered = [foo for foo in fooList if not fooChecker(foo)]
或者,生成器表达式(我上面链接的视频包括生成器表达式以及列表理解)或^{}(注意在2.x中,filter()是而不是懒惰-使用生成器表达式或itertools.ifilter()代替)可能更合适(例如,一个太大而无法读入内存的大文件不会以这种方式工作,但会使用生成器表达式)。你知道吗
filter()
itertools.ifilter()
如果您需要实际修改列表(很少,但有时可能是这样),那么您可以重新分配:
fooList[:] = fooListFiltered
迭代列表的浅副本。你知道吗
因为迭代时不能修改列表,所以需要迭代列表的浅层副本。你知道吗
使用
filter
:newList = list(filter(fooChecker, fooList))
或者
http://docs.python.org/2/library/functions.html#filter
一般来说,你只是不想这么做。相反,构建一个新的列表。大多数情况下,这是通过list comprehension完成的:
或者,生成器表达式(我上面链接的视频包括生成器表达式以及列表理解)或^{} (注意在2.x中,
filter()
是而不是懒惰-使用生成器表达式或itertools.ifilter()
代替)可能更合适(例如,一个太大而无法读入内存的大文件不会以这种方式工作,但会使用生成器表达式)。你知道吗如果您需要实际修改列表(很少,但有时可能是这样),那么您可以重新分配:
相关问题 更多 >
编程相关推荐