在Python中从数组中删除元素

3
考虑数组a=[1,2,3,1,2,3]。现在假设我想要在Python中删除这个数组中的所有2。所以我执行a.remove(2)。然而,结果是[1, 3, 1, 2, 3],即仅第一个2被删除了。如何删除数组中出现的所有2?一般地,给定一个数组和一个元素p,如何删除数组中所有等于p的元素?
注:我认为我应该提到这一点,本问题受到了一个Brilliant计算机科学问题的启发。

你可以使用list(set(myarray)),但它会重新排列数组,使其按字母/数字顺序排列。 - The-IT
@The-IT 我不明白那与我的问题有什么关联。 - aba
1
如果这样做,你会发现新列表中的所有重复项都将被移除。list(set([2, 6, 3, 4, 5, 3, 5, 6, 5])) [2, 3, 4, 5, 6] - The-IT
@The-IT 谢谢!我没想到这个角度。 :) - aba
是的,我刚刚重新阅读了我的评论,意译得非常糟糕。我的错。抱歉。 - The-IT
2个回答

4
使用列表推导式构建一个替换列表,其中所有元素都不等于“p”:
a = [i for i in a if i != p]

请注意,在Python中,数据类型被称为list而不是数组。


谢谢,它有效!我只是Python的初学者,我更习惯于Java,这就是为什么我使用“数组”而不是“列表”的原因。 - aba

3
你可以使用 filter() 函数。
>>> a= [1, 2, 3, 1, 2, 3]
>>> filter(lambda x: x != 2, a)
[1, 3, 1, 3]

在一个函数中:

>>> def removeAll(inList, num):
        return filter(lambda elem: elem != num, inList)

>>> removeAll(a, 2)
[1, 3, 1, 3]

1
只是一条注释:据我所知,在Python 3中filtermap等函数返回的是迭代器。但如果我错了,请纠正我... - tamasgal
列表推导式更易读(尽管在某些情况下map可能会更快),但我只是想提供一个替代的函数式方法来解决这个问题。 - Sukrit Kalra
当然可以,提供替代方案是很好的!这只是一条评论。顺便说一下,我已经编辑过了。(我的意思是那些内置函数在未来的Python版本中行为不同)。 - tamasgal
请问一下,这里的“lambda”命令的作用是什么?感谢您的贡献,但已经有一个更简单的答案了。无论如何,我更喜欢记住其他的替代方法。谢谢! - aba
1
这个链接应该会有所帮助 - http://www.secnetix.de/olli/Python/lambda_functions.hawk - Sukrit Kalra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接