【发布时间】:2019-10-25 20:17:12
【问题描述】:
正在查看此 Difference between tuples and frozensets in Python 并引导我针对我的问题提出这个问题
基本上我想要一个像元组但无序的数据类型,或者像frozenset但允许重复的数据类型(我意识到根据定义集不能这样做,但我只是在解释我想要的):可散列,无序,允许重复.
我正在尝试制作一组此类数据来检查不同的值,例如 (1,2,3) 应该被视为与 (1,3,2) 相同。我知道一种解决方案是使用列表,对其进行排序,然后将其设为元组,但我必须多次这样做,而且元组长度可能很长,所以如果可能的话,我宁愿不必每次都进行排序。
编辑:
问题略有改变。现在我有一个元组列表,例如: list_tuple = [(2, 2, 2), (2, 2, 2), (2, 1, 1)]
虽然问题没有太大变化,元组有一个重要的顺序,但元组的顺序没有。例如,这与前一个相同: [(2, 2, 2), (2, 1, 1),(2, 2, 2)] 我会得到很多我想添加到集合中的这些,这样我就可以计算不同的元组列表的数量。所以真的我有同样的问题,顺序无关紧要并且允许重复,除了我们正在处理元组而不是整数。
我想我应该对元组列表进行排序,然后使列表成为一个元组,它可以进入集合并正常工作。我知道我说过我不想排序,但我没有看到其他方式。
谢谢
【问题讨论】:
-
你可以在这里查看答案:stackoverflow.com/questions/55267781/…
-
所以基本上你想要一个不可变的
collections.Counter? -
@Aran-Fey:听起来更像是multiset,AFAIK 不在任何标准模块(或内置模块)中。
-
计数器基本上是一个多重集;它只是不显式存储每个对象,而是一个计数,指示您需要在元素的迭代中包含对象的次数。
{{'a', 'a', 'b'}}(构成多步语法)和Counter({'a': 2, 'b': 1})之间几乎没有什么有意义的区别。 -
@chepner:我想是的。 FWIW,pypi 上有一个
multiset模块。
标签: python python-3.x data-structures set hashable