【问题标题】:Remove multiple values from 2 lists, but only once, in Python在 Python 中从 2 个列表中删除多个值,但只删除一次
【发布时间】:2020-06-08 15:13:03
【问题描述】:

我有两个列表:

A = [5,5,4,3]
B = [5,1]

我想删除出现在两个列表中的值,但只删除一次,即输出应该是:

Aprime = [5,4,3]
Bprime = [1]

我知道使用sets 是一种获得差异的好方法,但这会删除所有重复,而不仅仅是一次

【问题讨论】:

    标签: python python-3.x list set


    【解决方案1】:

    您可以使用输入列表创建collections.Counter对象并获取两者的差异:

    from collections import Counter
    a = Counter(A)
    b = Counter(B)
    Aprime = list((a - b).elements()) # Aprime becomes: [5, 4, 3]
    Bprime = list((b - a).elements()) # Bprime becomes: [1]
    

    【讨论】:

    • 如果A = B = [1,1] 怎么办?这将返回两个空列表,这意味着1 被多次删除。
    【解决方案2】:

    使用集合查找重复项,然后将它们从原始列表中删除一次。

    dups = set(A).intersection(set(B))
    for dup in dups:
        A.remove(dup)
        B.remove(dup)
    

    【讨论】:

      【解决方案3】:

      您可以使用这两个列表的集合从与 A 和 B 关联的每个计数器中删除 Counter 构建,以便它们只被考虑一次。

      >>> A = [5,5,5,1,1]
      >>> B = [5,1,1]
      >>> a_new = list((Counter(A) - Counter(set(B))).elements())
      >>> b_new = list((Counter(B) - Counter(set(A))).elements())
      >>> a_new
      [5, 5, 1]
      >>> b_new
      [1]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-11
        • 2019-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多