尝试在Python中匹配精确子集

0 投票
3 回答
851 浏览
提问于 2025-04-18 01:26

我正在尝试查看一个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())

撰写回答