gpt4 book ai didi

python - 是否有一种数据类型/结构可以 : hold a list of numbers, 是可散列的、无序的并且允许重复

转载 作者:太空宇宙 更新时间:2023-11-03 20:14:06 25 4
gpt4 key购买 nike

正在看这个Difference between tuples and frozensets in Python并引导我针对我的问题提出这个问题

本质上我想要一个像元组但无序的数据类型,或者像卡住集但允许重复的数据类型(我意识到根据定义集不能做到这一点,但我只是在解释我想要什么):可散列,无序,允许重复.

我正在尝试制作一组​​此类数据来检查不同的值,例如 (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)]我将得到很多想要添加到集合中的这些,以便我可以计算不同元组列表的数量。所以我真的有同样的问题,顺序无关紧要并且允许重复,除了我们处理的是元组而不是整数。

我想我应该对元组列表进行排序,然后将列表设为元组,它就可以进入集合并正常工作。我知道我说过我不想排序,但我没有看到其他方法。

谢谢

最佳答案

根据您的用例,您可以将 Counter 对象包装在 MappingProxyType 中,该对象为您提供对底层 Counter 的只读访问权限>.

>>> from collections import Counter
>>> from types import MappingProxyType
>>> d1 = MappingProxyType(Counter("aab"))
>>> d2 = MappingProxyType(Counter("aba"))
>>> d1 == d2
True

据我所知,没有办法获取对底层 Counter 对象的引用以便修改它们。

您只需要做一些工作即可迭代重复项;幸运的是,itertools 模块完成了大部分繁重的工作。

>>> from itertools import chain, startup, repeat
>>> list(chain.from_iterable(starmap(repeat, d1.items())))
['a', 'a', 'b']
>>> list(chain.from_iterable(starmap(repeat, d2.items())))
['a', 'a', 'b']

关于python - 是否有一种数据类型/结构可以 : hold a list of numbers, 是可散列的、无序的并且允许重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58565214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com