【问题标题】:Delete element in list [duplicate]删除列表中的元素[重复]
【发布时间】:2018-05-02 06:34:30
【问题描述】:

我有一个主列表,它重新组合了我拥有的每个 ID。

master = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

在所有这些 ID 中,我想排除其中的一些。所以我做了第二个必须排除的 ID 列表

exclude = [1, 4, 5]

在您看来,有什么好的操作:

master_exclude = [2, 3, 6, 7, 8, 9, 10]

如果你明白我的意思吗?

谢谢!

【问题讨论】:

  • 在问这个问题之前你有没有尝试过?
  • @wwii 谢谢!我也在寻找一个副本。

标签: python


【解决方案1】:

这个条件list comprehension 可以工作:

master_exclude = [x for x in master if x not in exclude]

如果这些涉及的列表较大,请考虑首先将exclude 转换为set,以使包含检查更高效:

exclude = set(exclude)

【讨论】:

  • OP 没有做出任何努力。也许这是一个家庭作业。
  • @ElisByberi:请给我看一个链接/文本,说明 stackoverflow 在编程作业时有问题??!!!
  • @DRPK meta.stackoverflow.com/questions/334822/… 我同意 ElisByberi 的观点,即 OP 没有表现出他自己的任何努力。
  • 一点也不。我编程只是为了好玩!我正在学习框架 Django,但遇到了一些问题。
  • @DRPK 我不想,我也不能阻止你做别人的功课。做你想做的事。我有权发表我的意见。
【解决方案2】:

这将从master列表中删除该元素,该列表位于exclude

for i in exclude:
    master.remove(i)

不会删除重复项。

【讨论】:

  • 如果exclude 的所有元素都属于master 列表,它将正常工作。否则会导致ValueError
  • ... 和 remove 是一个 O(N) 操作,这使得这种方法 O(N*M) 这就是为什么最好从头开始构建新列表的原因。
  • @SreeramTP 同意!谢谢!
  • @schwobaseggl 谢谢!你回答了列表理解,所以..
  • @schwobaseggl 不会使用list-comprehension 也可以使用O(n*m) 作为测试not in 仍然必须通过exclude list。当然,这取决于lists...的相对大小...
【解决方案3】:

你可以用一个简单的 for 循环来做这样的事情。

master = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

exclude = [1, 4, 5]

for o in exclude:
    try:
        master.remove(o)
    except ValueError:
        pass

print(master) # [2, 3, 6, 7, 8, 9, 10]

【讨论】:

  • 如果你设置了master = [1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],那么在运行这个之后,只会删除第一个1[1, 1, 2, 3, 6, 7, 8, 9, 10]
  • 感谢指出。 !!
【解决方案4】:

list-comprehension 绝对是正确的方法,但也可以使用filter 来完成。不是理想的解决方案,而是另一种想法:

master_exclude = list(filter(lambda i: i not in exclude, master))

给出:

[2, 3, 6, 7, 8, 9, 10]

或者您可以使用whilefor-loop

for i in exclude:
    while master.count(i) > 0:
        master.remove(i)

给出相同的结果。

【讨论】:

    猜你喜欢
    • 2020-01-19
    • 2020-08-02
    • 2014-07-06
    • 1970-01-01
    • 2020-11-02
    • 2015-01-05
    • 2012-05-09
    • 2018-01-01
    • 1970-01-01
    相关资源
    最近更新 更多