【问题标题】:Removing elements from an array in python从python中的数组中删除元素
【发布时间】:2013-07-21 02:34:03
【问题描述】:

考虑数组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 我看不出这与我的问题有什么关系。
  • 如果这样做,您会发现新列表中的所有重复项都将被删除。 list(set([2, 6, 3, 4, 5, 3, 5, 6, 5])) [2, 3, 4, 5, 6]
  • @The-IT 谢谢!我没有那样想。 :)
  • 是的,我刚刚重读了我的评论并意识到它的措辞非常糟糕。我的错。对不起。

标签: python arrays python-2.7


【解决方案1】:

使用列表推导构建替换列表,其中所有元素等于p

a = [i for i in a if i != p]

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

【讨论】:

  • 谢谢,它有效!我只是python的初学者,我更习惯java,这就是为什么我用'array'这个词而不是'list'。
【解决方案2】:

您可以使用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]

【讨论】:

  • 只是评论:afaik filtermap 等在 python 3 中返回迭代器。但如果我错了,请纠正我......
  • List Comprehensions 更具可读性(尽管map 在某些情况下可能会快一些),但我只是想提供一种替代的函数式方法来解决这个问题。
  • 是的,当然,替代品很棒!这只是一个评论。顺便说一句,我编辑了它。 (我的意思是那些内置函数在未来的 python 版本中的行为不一样)。
  • 你能解释一下命令'lambda'在这里的作用是什么吗?感谢您的贡献,但已经发布了一个更简单的答案。无论如何,我更喜欢记住替代方案。谢谢!
  • 这个链接应该会有帮助 - secnetix.de/olli/Python/lambda_functions.hawk
猜你喜欢
  • 2017-09-13
  • 2013-11-21
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 2022-01-13
相关资源
最近更新 更多