【问题标题】:Compare with each other, items inside two lists, in a for loop?在for循环中相互比较,两个列表中的项目?
【发布时间】:2013-07-27 12:56:55
【问题描述】:

如果一个列表的一个项目在另一个列表中重复,我如何在 Python 中检查? 我想我应该使用 FOR 循环,逐项检查,但我陷入了这样的困境(我知道这是不正确的):

def check(a, b):
    for item in b:
        for item1 in a:
            if b[item] in a[item1]:
                b.remove(b[item1])

与第一个列表相比,我想删除第二个列表中的重复元素。

编辑:我确实假设列表 a 的项目在列表 b 中重复。这些项目可以是任何类型。

期望的输出: a=[a,b,c] b=[c,d,e]

我想附加两个列表并打印:a b c d e

【问题讨论】:

    标签: python list for-loop


    【解决方案1】:

    假设ab不包含需要保留的重复项并且这些项都是可散列的,你可以使用Python内置的set: p>

    c = list(set(b) - set(a))
    # c is now a list of everything in b that is not in a
    

    这适用于:

    a, b = range(7), range(5, 11)
    

    但它适用于:

    a = [1, 2, 1, 1, 3, 4, 2]
    b = [1, 3, 4]
    
    # After the set operations c would be [2]
    # rather than the possibly desired [2, 2]
    

    如果需要重复,您可以执行以下操作:

    set_b = set(b)
    c = [x for x in a if x not in b]
    

    b 使用set 将使查找O(1) 而不是O(N)(这对于小列表无关紧要)。

    【讨论】:

      【解决方案2】:

      您可以使用 Python 的 set 操作而无需循环:

      >>> a = [1,2]
      >>> b = [2]
      >>> set(a) - set(b)
      set([1])
      >>>
      

      【讨论】:

        【解决方案3】:

        使用set 命令和list 获取列表。

        d = list(set(a + b))
        

        如果您也想对列表进行排序,也可以使用list.sort()

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-06-17
          • 2015-07-28
          • 1970-01-01
          • 2020-06-08
          • 1970-01-01
          • 2020-10-01
          • 1970-01-01
          • 2023-03-05
          相关资源
          最近更新 更多