2016-01-06 68 views
0

我有一個pythonic列表,其中可能會重複的對象。例如,替換Python3中的引用

t_list = [object1, object2, object3, object1, object1, object5] 

爲了消除重複我使用list(set(t_list))。但在我的數據方案中有很多對象,其中包含對t_list元素的引用。所以,如果我從列表中刪除一些元素,它們的引用仍然存在。

我需要刪除重複後自動替換所有現有的引用。例如,如果我從t_list中刪除第3個和第4個元素,則引用將指向t_list[0]

如何在不循環數據方案的所有元素的情況下做到這一點?這可能嗎?

+1

那麼對於你的例子,結果將是'[object1,object2,object3,t_list [0],t_list [0],object5]'? – Reti43

+0

試一試[這個'OrderedSet'配方](http://code.activestate.com/recipes/576694/),它可能只是你需要的數據結構。 –

+0

讓我直說 - 說你有代碼[在這個要點](https://gist.github.com/waynew/166a1c4a7f4981b29970)。假設你從't_list'中刪除所有'list_one',你想把這個刪除傳播給'other_list'? –

回答

4

比方說你有一個列表,數據對象:

t_list = [object1, object2, object3, object1, object1, object5] 
# ... 
data = { 
    'some_path': t_list[1], 
    'some_more': { 
     t_list[3] 
    } 
}; 

這意味着你的數據不依賴於任何形式的名單上。您的數據具有對列表中對象的引用,但這些引用完全獨立於t_list。這意味着如果你改變列表:

t_list = list(set(t_list)) 

在沒有你的data對象的任何影響,不需要採取進一步的行動。你甚至可以忽略這個列表。

編輯:

這個小圖顯示的對象,列表和參考文獻在它們之間在存儲器:

enter image description here

t_list變換將從它除去任何的多個引用,但數據是不以任何方式改變。