0

我需要创建和使用 n 个堆,我正在尝试使用 heapq 并尝试将元素推送到列表列表中,其中每个元素都被视为一个单独的堆。但它的行为很奇怪。我只想将元素 6 和 7 推入我的第三堆。但它被推到我所有的堆里。有什么办法吗??

>>> test
[[], [], [], []]
>>> 
>>> heappush(test[2],6)
>>> heappush(test[2],7)
>>> test
[[6, 7], [6, 7], [6, 7], [6, 7]]
4

2 回答 2

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], []]
于 2013-04-27T11:17:33.297 回答
2

您对所有堆使用相同的堆实例。你可能在做这样的事情吗?

test = [ [] * 4]

您需要创建四个不同的堆。具体如何取决于你现在在做什么。

于 2013-04-27T11:16:51.410 回答