如何在Python中使用堆阵列

问题描述:

我需要创建和使用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

你似乎已经创建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

您对所有堆都使用相同的堆实例。你是否正在做这样的事情?

test = [ [] * 4] 

您需要改为创建四个不同的堆。究竟如何取决于你现在在做什么。