尝试在Python中匹配精确子集
我正在尝试查看一个Python中的集合是否包含另一个集合的元素。我试过用集合比较,但问题是我需要能够识别元素的精确匹配。例如,像[3,3]这样的子集会和[3,1,2]匹配,但我希望它只和[3,3,1]匹配,或者任何包含两个3的集合变体。
我正在遍历所有可能的3个元素的集合,使用的数字是0到4,想看看哪些集合包含[3,3]这个集合。我应该使用集合还是列表更好呢?有没有什么好的建议?
谢谢!
3 个回答
0
如果你想在集合中允许重复元素(这样它们就变成真正的多重集合或“袋子”,而不是普通的集合),你应该使用 collections.Counter
。这个工具支持集合操作(比如 &
、+
、-
),并且能正确处理多重集合的逻辑。
要检查一个多重集合 a
是否是另一个多重集合 b
的子集,可以用 a == a & b
来进行测试:
from collections import Counter
a = Counter([3,3])
b = Counter([3,1,2])
print(a == a & b) # prints False, since a is not a subset of b
0
假设你说的“集合”是指“列表”,那么下面这样的代码应该可以用(虽然没测试过):
def contains(superset, subset):
for elem in set(superset):
if superset.count(elem) < subset.count(elem):
return False
return True
1
集合不能包含重复的元素。你可以使用列表或字典,其中字典的键对应的值是这个键在集合中出现的次数。
类似于:
d1 = {3:2, 1:1}
d2 = {3:2}
all(d1.get(k,0)-v>=0 for (k,v) in d2.items())