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
?