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