1

我有这样的 2 个列表:

list1=['A','B'] 
list2=['A','C','D']

我想在两个列表之间进行比较,找出条目中缺少的、附加的和没有变化的,我正在像这样访问它:

set1=set(list1)
set2=set(list2)

MissingName=set1.difference(set2)
AdditionalName=set2.difference(set1)

这给了我缺失和额外的条目,我怎样才能找到没有变化,应该是 A?

4

3 回答 3

11

您可能正在寻找set.intersection

于 2013-04-29T12:11:36.210 回答
3

你可以使用这个Counter类:

>>> list1=['A','B']
>>> list2=['A','C','D']
>>> from collections import Counter
>>> c1=Counter(list1)
>>> c2=Counter(list2)
>>> c1-c2 # missing items
Counter({'B': 1})
>>> c2-c1 # additional items
Counter({'C': 1, 'D': 1})
>>> c2&c1 # intersection
Counter({'A': 1})

使用该类的好处Counter是,与 using 不同set,它适用于多重性很重要的情况,例如:

>>> Counter(['A', 'A', 'B']) - Counter(['A', 'B'])
Counter({'A': 1})

此外,您不必使用这种笨重的方法名称 :-)

于 2013-04-29T12:15:46.163 回答
0
additional_entries_in_first = set1 - set2

additional_entries_in_second = set2 - set1

are_lists_equal = list1 == list2

are_element_sets_equal = set1 == set2

all_items = set1 | set2

shared_items = set1 & set2

还需要什么吗?

于 2013-04-29T12:53:02.147 回答