如何检查一个列表是否包含另一个列表的所有元素(包括重复项)

use*_*557 1 python

例如

t = ["A", "A", "A", "b", "b"]
s = ["A", "A", "b", "b"]
Run Code Online (Sandbox Code Playgroud)

s 并不包含 t 中的每个元素。t 包含 s 中的每个元素。

我想出了这个,但想知道是否有更有效的方法

def check(l1, l2):
    for i in l2:
        if(l2.count(i) > l1.count(i)):
            return False
    return True
Run Code Online (Sandbox Code Playgroud)

sch*_*ggl 6

重复调用list.count(对于同一个列表)效率非常低。您可以使用collections.Counter以及它如何实现差异:

from collections import Counter

def contains(l1, l2):
    return not (Counter(l2) - Counter(l1))

>>> contains(["A", "A", "A", "b", "b"], ["A", "A", "b", "b"])
True
>>> contains(["a", "a", "b"], ["a", "b"])
True
>>> contains(["a", "b"], ["a", "a", "b"])
False
>>> contains(["a", "a", "b"], ["a", "b", "c"])
False
Run Code Online (Sandbox Code Playgroud)