2016-01-22 48 views
2

我是新來的數據結構在Python中,並想知道你如何模擬像Python中的指針這樣的事情,以便多個結構可以引用和管理相同的一塊數據。Python:如何創建一個列表和字典之間的公共元素

我有以下兩種結構

my_list = [1] 
my_dictionary = {} 
my_dictionary["hello"] = my_list[0] 

當我做下面我得到真正的

id(my_dictionary["hello"]) == my_list[0] 

但是我怎麼能強迫無論是從字典和一氣呵成的名單中除名? 如果我下面my_dictionary仍具有參考my_list [0],即1

del my_list[0] 

有擺脫既一氣呵成這些元素的一種方式?什麼是做這樣的鏈接結構的python方式?

+0

'del my_list [0]; del my_dictionary [「hello」]'? – KSFT

+0

但這意味着它們沒有鏈接,因此重複了努力......如果我忘記從一個結構中刪除該元素而不是從另一個結構中刪除該元素,該怎麼辦?似乎容易出錯 – Har

+0

你不能通過從列表中刪除一個元素來刪除字典中的一個鍵(不做非常複雜的事情)。它們是兩個不同的對象,調用一個方法不會改變另一個。 – KSFT

回答

2

這真的取決於你試圖通過交叉引用解決的問題。


假設您的意圖是能夠有效地通過鍵找到一個項目,以及按順序依次迭代。在這種情況下,不管語言如何,您可能都希望避免交叉引用散列表和數組數據結構,因爲更新本質上是線性的。相反,交叉引用一個散列表和一個列表可能更有意義。

對於這一點,你可以使用類似llist

d = {} 
l = llist.dllist() 

# insert 'foo' and obtain the link 
lnk = l.append('foo') 
# insert the link to the dictionary 
d['foo'] = lnk 

相反,假設你的意圖是爲了能夠有效地都由鍵找到項目,以及通過索引來定位。然後你可以使用一個字典和一個列表,並重新編輯該字典的每個修改列表。幻想交叉引用沒有真正的理由。

0

簡而言之,沒有辦法輕鬆鏈接你的兩個結構。

您可以操縱指向的對象,以便它具有一些「已刪除」狀態,並且會像刪除它(同時位於兩個容器中一樣)。

但是,如果您想要的只是dictlist,請使用list(the_dict.values())

如果一切都失敗了,你可以讓一個類來實現這一點。請參閱https://docs.python.org/2/reference/datamodel.html#emulating-container-types瞭解您的班級必須具備的詳細信息。在課堂上,你會有「重複的努力」,但如果它被正確實施,它不會容易出錯。

-1

你總是可以做這樣的事情:

Pointers in Python?

(快速計算器搜索顯示了一定的成果)

是與不僅僅是數據結構更搞亂。 請記住,Python爲你管理內存(在大多數情況下,非常好),所以你不必擔心自己清理。

-1

我已經嘗試了下面的代碼,它的工作原理(改變其中一個DataStructure的變化)。 對此有幫助嗎?

list1 = [1,2,3] 
list2 = [4,5,6] 

my_dictionary = {} 
my_dictionary["a"] = list1 
my_dictionary["b"] = list2 

del list1[0] 
print list1 
print list2 
print my_dictionary 
相關問題