我目前有一个类似以下的集合:
{(a,b), (b,a), (c,b), (b,c)}
我想拥有的是:
{(a,b), (c,b)}
您可能会注意到重复值已被完全删除,因此两个元组在内部无论顺序如何都不会具有相同的元素.
我怎样才能告诉集合忽略元组中元素的顺序,而只是检查元组之间的值?
解决方法:
好的,因此您有了一个集合{c1,c2,c3,…},其中每个cN本身都是某种集合.
如果您不关心cN中元素的顺序,但要确保它是唯一的(不考虑顺序),则cN应该是frozenset
1而不是元组:
>>> orig = {("a", "b"), ("b", "a"), ("c", "b"), ("b", "c")}
>>> uniq = {frozenset(c) for c in orig}
>>> uniq
{frozenset(['b', 'a']), frozenset(['b', 'c'])}
通常,从Python提供的数据类型中选择适当的数据类型比定义和维护自定义类要简单得多.
1不能是集合,因为作为更大集合的成员,它需要是可哈希的.