例如
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)
重复调用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)