假设我有一个列表,我想从中删除尊重条件的元素,我怎样才能更容易实现?
我尝试过:
for i in range (len(list)):
if [condition]:
del(list[i]);
显然它不起作用...我脑海中唯一的解决方案就是向左移动以替换我想删除的元素然后删除最后一个元素..无论如何还有更快的解决方案吗?
答案 0 :(得分:12)
如何使用列表理解:
mylist = [x for x in mylist if not condition]
答案 1 :(得分:4)
最简单的方法是使用filter
创建列表的副本:
list_removed = filter(lambda item: not condition(item), list)
答案 2 :(得分:1)
我推荐@ Space_C0wb0y的解决方案;但是,为了完整起见,我想指出
for i in range(len(lst)-1, -1, -1):
if (condition):
del lst[i]
正常运作。
答案 3 :(得分:0)
如果您需要就地修改列表(以便其他人对filter
或列表理解所做的建议对您没有帮助)那么:
您可以避免处理元素以相反顺序给出的代码彻底失败,这样删除一个代码就不会影响以后处理的代码的编号。
转移元素以将“死”元素放在最后几乎肯定是不值得的,但如果你这样做,你可以通过在最后删除所有内容来进行一次删除。死的元素,而不是你看到的每个元素。 (从中获得的收益可能很小。删除列表的最后一个元素很便宜,除非碰巧触发实际调整大小,这在设计上并不经常发生。)
如果碰巧你删除了很多元素 - 列表中所有元素的很大一部分 - 那么上面2中的“不值得”就不那么明显了,你应该进行基准测试两种方式。