0
我正在写一个Python程序,涉及由不可变对象表示的许多状态的图。生成图的过程会生成每个状态的许多重复副本。有很多状态,所以为了节省内存,我想在最终的图形对象中只保留每个状态的一个副本。因此,我想建立一套规范的状态,并写一个函数是这样的:如何在Python 3中获取集合的匹配元素?
def canonicalize(state, canonical_states):
if state in canonical_states:
state, = (cstate for cstate in canonical_states if cstate == state)
else:
canonical_states.add(state)
return state
此功能需要一个状态,并返回该国的“经典”版本。如果这个国家以前没有见过,它就成了规范版本。
应该可以在大致恒定的时间内查找设置元素,但是这种实现需要每次查找需要O(n)个时间。有没有更好的办法?
一个解决方案是将canonical_states
作为自己的字典映射元素(请参阅下面的答案)。我更喜欢在不改变canonical_states
类型的情况下实现此性能的解决方案。
一言以蔽之:鉴于x in S
对于一些设置S
,有没有办法让元素S
这样x == y
y
?