在Python中, remove()
将删除列表中第一次出现的值 .
如何从列表中删除所有出现的值,而不对列表进行排序?
这就是我的想法 .
>>> x = [1, 2, 3, 4, 2, 2, 3]
>>> def remove_values_from_list(the_list, val):
while val in the_list:
the_list.remove(val)
>>> remove_values_from_list(x, 2)
>>> x
[1, 3, 4, 3]
20 回答
要删除所有重复的事件并在列表中保留一个:
这是我用于Project Euler的函数:
仅限Python 3
看看简单的解决方案
解决方案1:
这将返回一个列表,其中包含
x
的所有元素,而不是2
解决方案2:
你可以这样做
这会修改列表吗?
我相信如果您不关心列表顺序,这可能比任何其他方式更快,如果您确实关注最终订单存储索引从原始和度假 .
如果必须修改原始列表,则仍可以使用切片分配,同时仍使用有效的列表推导(或生成器表达式) .
出了什么问题:
电机= ['1','2','2']对于电机中的i:如果i!='2':打印(i)打印(电机)
使用anaconda
功能方法:
2.x
3.x
要么
以更抽象的方式重复第一篇文章的解决方案:
针对具有1.000.000元素的列表/数组的Numpy方法和时序:
时序:
Conclusion: 与列表理解方法相比,numpy快了27倍(在我的笔记本上)
PS如果你想将常规Python列表
lst
转换为numpy数组:Build :
校验:
我相信更简单 .
First solution, using filter. Second solution, using list comprehension.
您可以使用列表理解:
关于速度!
上面的所有答案(除了Martin Andersson的)都会创建一个没有所需项目的新列表,而不是从原始列表中删除项目 .
如果您对列表有其他引用,这可能很重要 .
要修改列表,请使用这样的方法
就速度而言,我的笔记本电脑上的结果是(所有5000个条目列表中删除了1000个条目)
列表理解 - ~400us
过滤器 - 约900us
.remove()循环 - 50ms
所以.remove循环慢了大约100倍........嗯,也许需要一种不同的方法 . 我发现最快的是使用列表推导,但随后替换原始列表的内容 .
以可读性为代价,我认为这个版本稍微快一些,因为它不会强制重新检查列表,因此无论如何都要执行完全相同的工作删除:
如果你没有内置的
filter
或者不想使用额外的空间而你需要线性解决方案......从Python列表中删除所有出现的值
结果:
6.9 8.9 3 5 4.9 1 2.9 9 12.9 10.9 11
或者,
结果:
6.9 8.9 3 5 4.9 1 2.9 9 12.9 10.9 11