【问题标题】:Subtract two lists of tuples from each other将两个元组列表相减
【发布时间】:2016-09-18 15:57:29
【问题描述】:

我有这两个列表,我需要从另一个列表中减去一个,但是常规的“-”不起作用,.intersection 或 XOR (^) 也不起作用。

A = [(0, 1)]
B = [(0, 0), (0,1), (0, 2)]

基本上我想要的是:

B - A = [(0, 0), (0, 2)]

【问题讨论】:

    标签: python list tuples subtraction


    【解决方案1】:

    你可以使用列表推导来解决这个问题:

    [item for item in B if item not in A]
    

    更多讨论可以找here

    【讨论】:

      【解决方案2】:

      如果BA 中没有重复的元组,最好将它们保留为集合,并使用集合的difference

      A = [(0, 1)]
      B = [(0, 0), (0,1), (0, 2)]
      diff = set(B) - set(A) # or set(B).difference(A)
      print(diff)
      # {(0, 0), (0, 2)}
      

      您可以执行其他操作,例如在两组之间查找intersection

      >>> set(B) & set(A)
      {(0, 1)}
      

      或者甚至拿走他们的symmetric_difference:

      >>> set(B) ^ set(A)
      {(0, 0), (0, 2)}
      

      【讨论】:

      • 当使用像.difference 这样的方法时,你不需要明确地将A 转换为一个集合,因为它会接受任何可迭代的。
      【解决方案3】:

      您可以通过将列表转换为集合来执行此类操作。设置差异:

      r = set(B)-set(A)
      

      必要时转换为列表:list(r)

      与在列表上运行“in”操作相比,在集合上工作效率更高:using lists vs sets for list differences

      【讨论】:

        猜你喜欢
        • 2017-09-11
        • 1970-01-01
        • 1970-01-01
        • 2015-10-30
        • 2011-11-25
        • 1970-01-01
        • 2014-07-01
        • 1970-01-01
        • 2013-03-25
        相关资源
        最近更新 更多