【问题标题】:Is there a Python datatype for unordered sets of sets?是否有用于无序集的 Python 数据类型?
【发布时间】:2017-11-18 02:51:02
【问题描述】:

我想将集合 AB 存储在集合 C 中。 我的条件是,如果设置A = {a,b} 并设置B = {b,a}

那么设置A等于设置B

然后设置C 将是= {{a,b}}

是否有支持这样的数据类型?

【问题讨论】:

  • 不,因为 A 和 B 相等,它们的哈希值相同,所以你不能同时拥有两个。 (我指的是散列冻结集)

标签: python set


【解决方案1】:

frozenset() 类型符合您的条件:

>>> A = frozenset({"a", "b"})
>>> B = frozenset({"b", "a"})
>>> A == B
True
>>> frozenset({ A, B })
frozenset({frozenset({'b', 'a'})})

【讨论】:

    【解决方案2】:

    是的,那个数据类型就是set。诀窍是 inside 集合必须是 frozensets,set 的不可变对应物,才能将它们放置在另一个集合中。您可能还想将外部set 设为frozenset,具体取决于您想用它做什么;例如,如果您想将这些集合无限期地粘贴在更多层的集合中,那么对所有内容都使用 freezesets 可能更容易。

    >>> A = frozenset(['a', 'b'])
    >>> B = frozenset(['b', 'a'])
    >>> C = {A, B}
    >>> C
    set([frozenset(['a', 'b'])])
    

    【讨论】:

    • 谢谢。我还想知道是否有接受非唯一元素的有序集合。像 A = {1, 0, 1} 和 B = {1,1,0} 这样的东西,我可以执行一个交集,这会给我 {1}?
    • @user3927312:那...听起来不像是任何集合,甚至不是多集合。这听起来像是一个序列,而对序列建模的自然选择是 listtuple,但不清楚你想要交集是什么意思。
    • 因此,如果我有上面提到的 A 和 B,如果我要进行联合,那么它会给我 {1,1,1},而对于交集,它将是 {1,0,0 }。我需要他们来维持秩序。我刚刚意识到这几乎是布尔值和 ors。
    • @user3927312:听起来您正在尝试将集合编码为存在/不存在布尔值的序列。您可以使用列表/元组和手动相交/联合实现,或者使用整数和按位和/或,或者您可以放弃该编码并只使用set/frozenset,或者您可以做其他事情。不过,我们正在远离这个问题的焦点。如果您还有其他问题要问,请发布一个新问题。
    猜你喜欢
    • 1970-01-01
    • 2018-04-26
    • 2011-01-21
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    相关资源
    最近更新 更多