试图匹配python中的确切子集

时间:2014-04-05 04:40:43

标签: python list set

我正在尝试查看python中的一个集合是否包含另一个集合的元素。我试过使用集合比较,但问题是我需要能够只识别元素的完全匹配。例如,[3,3]的一个子集将匹配一组[3,1,2],当我希望它只匹配[3,3,1]或任何具有两个三分的变量时。

我正在使用数字0-4迭代3个元素集的所有可能变体,试图查看哪些包含[3,3]集。我应该使用套装还是使用清单更好?关于如何做到这一点的任何想法?

干杯

3 个答案:

答案 0 :(得分:1)

集不能包含重复元素。你可以使用一个列表或一个字典,其中键的值是键中出现键的次数。

类似的东西:

d1 = {3:2, 1:1}
d2 = {3:2}
all(d1.get(k,0)-v>=0 for (k,v) in d2.items())

答案 1 :(得分:0)

假设通过设置你的意思列表,这样的东西应该工作(未经测试):

def contains(superset, subset):
    for elem in set(superset):
        if superset.count(elem) < subset.count(elem):
            return False
    return True

答案 2 :(得分: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