如果我有两个看起来像这样的列表:
list1 = ['a', 'a', 'b', 'c']
list2 = ['a', 'a', 'a', 'b']
如何查看第一个列表中是否包含第二个列表?我认为集合不起作用,因为字母可以重复。
答案 0 :(得分:2)
如果频率重要但计算频率,则设置不会起作用:
from collections import Counter
list1 = ['a', 'a', 'b', 'c']
list2 = ['a', 'a', 'a', 'b']
cn1, cn2 = Counter(list1), Counter(list2)
print(all(cn2[k] <= v for k, v in cn1.items()))
如果list2中每个字符串的计数是&lt; =它在list1中出现的次数,那么list1中的list2中的所有字符串都会出现,对于你的问题中的列表,它将返回False但是,
list1 = ['a', 'a', 'b', 'c', 'a']
list2 = ['a', 'a', 'a', 'b']
将返回True
,因为您拥有相同数量的a和b。
答案 1 :(得分:0)
与@ Padraic_Cunningham的答案类似:
from collections import Counter
def contained(l1, l2):
cntr1 = Counter(list1)
cntr2 = Counter(list2)
for k in cntr2:
if cntr2[k] != cntr1.get(k):
return False
return True
list1 = ['a', 'a', 'b', 'c']
list2 = ['a', 'a', 'a', 'b']
contained(list1, list2)