【问题标题】:How to subtract two iterables in python如何在python中减去两个迭代
【发布时间】:2015-02-17 20:59:12
【问题描述】:

有两个列表 A 和 B。我想获取 A 中的所有元素,而不是 B 中的所有元素。有什么有效的方法吗?

【问题讨论】:

    标签: python list subtraction


    【解决方案1】:

    您可以使用列表推导来为您执行此操作。

    filtered = [i for i in A if i not in B]
    

    如果列表都很大,您可能需要考虑从B 创建一个set 以加快成员资格查找

    setB = set(B)
    filtered = [i for i in A if i not in setB]
    

    此解决方案维护A 的顺序以及A 中存在的任何重复项。

    【讨论】:

    • 这可能很简单,那么复杂呢?
    • @Avoen 如果将B 转换为set,则为O(N) 时间复杂度。
    【解决方案2】:

    我总是喜欢为此使用集合:

    set(A) - set(B)
    

    编辑:除非 A 有重复项或您关心订单,否则请使用@Cyber​​ 的答案

    【讨论】:

    • 只要项目的顺序和数量无关紧要,这很有效。
    【解决方案3】:

    套装非常适合这个目的

    set(A) - set(B)
    

    例如

    >>> set([2,2,2,3,3,4])- set([1,2,2,4,5])
    set([3])
    

    顺便说一句。这看起来像this

    【讨论】:

      猜你喜欢
      • 2017-09-29
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 2013-03-06
      • 2011-07-12
      • 1970-01-01
      相关资源
      最近更新 更多