2013-04-27 62 views
0

我需要創建和使用n堆,我試圖使用heapq並試圖將元素推入列表中,其中每個元素將被視爲一個單獨的堆。但其表現奇怪。我只是想將元素6和7推入我的第3堆。但它被推入我的所有堆。任何出路的方式?如何在Python中使用堆陣列

>>> test 
[[], [], [], []] 
>>> 
>>> heappush(test[2],6) 
>>> heappush(test[2],7) 
>>> test 
[[6, 7], [6, 7], [6, 7], [6, 7]] 
+0

[Python列表索引](http://stackoverflow.com/questions/13058458/python-list-index)的可能重複 – 2013-04-27 11:18:17

+0

你真的應該顯示代碼。 – 2013-04-27 11:22:17

+0

非常感謝,就是這個問題 – JATMON 2013-04-27 11:27:03

回答

3

你似乎已經創建test這樣的事情:

>>> from heapq import heappush 
>>> test = [[]] * 4 
>>> 
>>> heappush(test[2],6) 
>>> heappush(test[2],7) 
>>> test 
[[6, 7], [6, 7], [6, 7], [6, 7]] 

此創建四個引用到相同列表對象。使用列表解析,使四個不同的列表:

>>> test = [[] for _ in range(4)] 
>>> heappush(test[2],6) 
>>> heappush(test[2],7) 
>>> test 
[[], [], [6, 7], []] 
+1

我愛你如何在過去幾天至少回答這個問題至少5次。 – jamylak 2013-04-27 12:42:26

2

您對所有堆都使用相同的堆實例。你是否正在做這樣的事情?

test = [ [] * 4] 

您需要改爲創建四個不同的堆。究竟如何取決於你現在在做什麼。