我有元组列表/列表(-1,0,1)(-1,1,0)(-1,2,-1)(-1,-1,2)(0,1,-1)
我需要它们:(-1,1,0)(-1,2,-1)
我希望(-1,0,1)和(-1,1,0)Map到相同的东西,我想到了set这样的东西,但它会删除元组中可能存在的任何重复项。
在生成一个新的元组(比如(-1,-1,2))时,我想执行一个检查,如下所示
if (-1,-1,2) in seen:
pass
else:
insert(seen, (-1,-1,2))
为此,我需要数据结构是可散列的,以便进行O(1)查找。2有什么想法我将如何在Python中实现这一点吗?
4条答案
按热度按时间whlutmcx1#
您可以对元组进行排序,并使用
set
检查重复项,因为元组是可散列的产出
可以使用
defaultdict
输出:
klh5stk12#
你可以使用
collections.Counter
来有效地获取列表中每个元组的签名,将Counter
对象的项Map到frozensets,这样签名就可以哈希了,将它们放入一个集合中去重,然后使用Counter.elements()
方法重新创建元组:这将返回:
hfsqlsce3#
您可以使用
set
来避免添加Map到同一事物的元素。它返回
[(-1, 0, 1), (-1, 2, -1)]
编辑
这会错误地将一些元组标记为重复。
3hvapo4f4#
multiset
package中的FrozenMultiset
做你想要的事情。抽象地说,多重集是无序的,并且“允许”重复。幸运的是,多重集的一些实现是不可散列的,但
FrozenMultiset
不是。