似乎有几种方法可以确定一个集合是否是另一个集合的子集,但我没能找到一种简洁的方法来确定一个列表(或数组)中的所有元素,包括重复值,在另一个列表(或数组)中是否出现。例如,对于假设函数
特别是上面的第四和第五个例子,我在实现时遇到了麻烦。
contains_all(A, B)
,它检查是否所有B
的元素都包含在A
中,这些是一些预期输出:
contains_all([11, 4, 11, 6], [6, 11])
返回 True
(顺序无关紧要)
contains_all([11, 4, 11, 6], [11, 9])
返回 False
(没有9)
contains_all([11, 4, 11, 6], [11, 11])
返回 True
contains_all([11, 4, 11, 6], [11, 11, 11])
返回 False
(只有两个11)
contains_all([11, 4, 11, 6], [6, 6])
返回 False
(只有一个6)
contains_all([11, 4, 11, 6], [11, 4, 6, 11])
返回 True
contains_all([11, 4, 11, 6], [11, 4, 11, 6, 5])
返回 False
(没有5)特别是上面的第四和第五个例子,我在实现时遇到了麻烦。
set(B).issubset(A)
或列表理解可以处理其他情况,但不包括这些情况,因为集合没有重复元素。有没有一种简洁的方法来做到这一点?如果没有,写一个能够实现此功能的函数最佳方式是什么?似乎使用collections.Counter对象或多重集可能是可能的,但我不确定如何去做。
TypeError: '>=' not supported between instances of 'Counter' and 'Counter'
。 - Guy