两个列表中的相等元素

时间:2012-11-05 22:19:06

标签: python python-3.x

  

可能重复:
  Determine if 2 lists have the same elements, regardless of order?
  Match two lists of letters in Python

我有列表a和列表b。所以我需要找到,如果列表有相同的元素。我不知道,但我正在考虑使用collections

2 个答案:

答案 0 :(得分:4)

假设您不关心订单。这里有几个选项,最佳解决方案取决于列表的内容。以下是按优先顺序(和限制)的几种可能性:

  • 如果没有重复项,并且所有项目都可以清除:

    set(a) == set(b)
    
  • 如果有重复项,且所有项目属于同一类型:

    sorted(a) == sorted(b)
    
  • 如果有重复项且列表可能有混合类型,并且所有类型都可以清除:

    collections.Counter(a) == collections.Counter(b)
    
  • 如果存在重复项,则列表可能具有混合类型,并且某些元素可能不具有可清除性(必须有更好的方法来执行此操作,但我想出的是将每个元素转换为元组使用类型的字符串表示形式,后跟值):

    keyfunc = lambda x: (str(type(x)), x)
    sorted(a, key=keyfunc) == sorted(b, key=keyfunc)
    

答案 1 :(得分:0)

>>> all(x in b for x in a)