试图匹配python中的精确子集

试图匹配python中的精确子集,python,list,set,Python,List,Set,我试图看看python中的一个集合是否包含另一个集合的元素。我曾尝试使用集合比较,但问题是我只需要能够识别元素的精确匹配。例如,[3,3]的一个子集将匹配一组[3,1,2],而我希望它只匹配[3,3,1],或任何两个三的集合变量 我正在使用数字0-4遍历3元素集的所有可能变体,试图查看哪些变体包含[3,3]集。我应该使用集合还是使用列表更好?有什么办法吗 啦啦队集不能包含重复的元素。您可以使用列表或dict,其中键的值是该键在集合中出现的次数 比如: d1 = {3:2, 1:1} d2 = {

我试图看看python中的一个集合是否包含另一个集合的元素。我曾尝试使用集合比较,但问题是我只需要能够识别元素的精确匹配。例如,[3,3]的一个子集将匹配一组[3,1,2],而我希望它只匹配[3,3,1],或任何两个三的集合变量

我正在使用数字0-4遍历3元素集的所有可能变体,试图查看哪些变体包含[3,3]集。我应该使用集合还是使用列表更好?有什么办法吗


啦啦队集不能包含重复的元素。您可以使用列表或dict,其中键的值是该键在集合中出现的次数

比如:

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

假设set指的是list,类似这样的东西应该可以工作(未经测试):

def包含(超集、子集):
对于集合中的元素(超集):
如果超集计数(elem)<子集计数(elem):
返回错误
返回真值

如果你想在你的集合中有重复的集合(使它们成为真正的多集合或“袋子”,而不是合适的集合),你应该使用
集合。计数器
。它支持具有适当多集语义的集合操作(
&
+
-

测试一个多集
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

根据定义,
[3,3]
不是一个集合,因为集合不包含重复项。@roippi我试图应用苏格拉底方法(),但没关系。我如何使用列表?我修改了答案。我认为地图会更容易使用。[3,3,1]是用{3:2,1:1}表示的,你是说字典,不是吗map@Hyperboreus,你说他们是什么意思?@perreal“是”就像在。
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