如何在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]]
答
你似乎已经创建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]
您需要改为创建四个不同的堆。究竟如何取决于你现在在做什么。
[Python列表索引](http://stackoverflow.com/questions/13058458/python-list-index)的可能重复 – 2013-04-27 11:18:17
你真的应该显示代码。 – 2013-04-27 11:22:17
非常感谢,就是这个问题 – JATMON 2013-04-27 11:27:03