一尘不染

如何检查一个列表中的所有项目是否在另一个列表中?

python

我有两个清单说

List1 = ['a','c','c']
List2 = ['x','b','a','x','c','y','c']

现在,我想找出List2中是否存在List1的所有元素。在这种情况下,就全部存在。我不能使用子集函数,因为我可以在列表中重复元素。我可以使用for循环来计算List1中每个项目的出现次数,并查看它是否小于或等于List2中的出现次数。有一个更好的方法吗?

谢谢。


阅读 218

收藏
2020-12-20

共1个答案

一尘不染

当出现次数无关紧要时,您仍可以通过动态创建集合来使用子集功能:

>>> list1 = ['a', 'c', 'c']
>>> list2 = ['x', 'b', 'a', 'x', 'c', 'y', 'c']
>>> set(list1).issubset(list2)
True

如果需要检查每个元素在第二个列表中显示的次数是否至少与第一个列表中显示的次数相同,则可以使用Counter类型并定义自己的子集关系:

>>> from collections import Counter
>>> def counterSubset(list1, list2):
        c1, c2 = Counter(list1), Counter(list2)
        for k, n in c1.items():
            if n > c2[k]:
                return False
        return True

>>> counterSubset(list1, list2)
True
>>> counterSubset(list1 + ['a'], list2)
False
>>> counterSubset(list1 + ['z'], list2)
False

如果您已经有了计数器(无论如何它也可能是存储数据的有用选择),也可以将其写为一行:

>>> all(n <= c2[k] for k, n in c1.items())
True
2020-12-20