代码之家  ›  专栏  ›  技术社区  ›  xendi

Python-对比度2列表[重复]

  •  0
  • xendi  · 技术社区  · 6 年前

    我试过几种方法,但似乎都不管用。我需要在Python中对比(而不是比较)两个列表,以便返回两个列表之间的差异。我需要知道list1中的哪些元素在list2中不存在。我试过这个:

    zombies = list(set(list1) - set(list2))
    

    但我得到的是相同的,而不是不同的。

    2 回复  |  直到 6 年前
        1
  •  0
  •   d_kennetz    6 年前

    如果你的列表很长,并且速度成为一个重要因素,那么使用frozenset

    a = [1, 2, 3, 4, 5]
    b = [9, 8, 7, 6, 5]
    frozenset(a).difference(b)
    

    返回:

    frozenset({1, 2, 3, 4})
    

    我知道在您的问题中,它指出您需要知道列表1中的哪些项不出现在列表2中,但是请注意,这个方法就是这样做的。如果要知道列表2中的哪些项不出现在列表1中,请切换列表:

    frozenset(b).difference(a)
    

    返回:

    frozenset({6, 7, 8, 9})
    

    方法略有不同,但如果不需要下游操作,则速度几乎是上面列出的方法的两倍。

    为了证实我说的话:

    %timeit set(a).difference(set(b))
    
    1000000 loops, best of 3: 844 ns per loop
    
    %timeit frozenset(b).difference(a)
    
    1000000 loops, best of 3: 588 ns per loop
    

    希望这能消除分歧。

        2
  •  0
  •   shahbazkhan    6 年前

    list1 = [1,2,3,4,5]
    list2 = [3,4,5]
    zombies = list(set(list1).difference(set(list2)))
    

    输出为:

    [1, 2]