我需要创建和使用 n 个堆,我正在尝试使用 heapq 并尝试将元素推送到列表列表中,其中每个元素都被视为一个单独的堆。但它的行为很奇怪。我只想将元素 6 和 7 推入我的第三堆。但它被推到我所有的堆里。有什么办法吗??
>>> test
[[], [], [], []]
>>>
>>> heappush(test[2],6)
>>> heappush(test[2],7)
>>> test
[[6, 7], [6, 7], [6, 7], [6, 7]]
我需要创建和使用 n 个堆,我正在尝试使用 heapq 并尝试将元素推送到列表列表中,其中每个元素都被视为一个单独的堆。但它的行为很奇怪。我只想将元素 6 和 7 推入我的第三堆。但它被推到我所有的堆里。有什么办法吗??
>>> 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], []]
您对所有堆使用相同的堆实例。你可能在做这样的事情吗?
test = [ [] * 4]
您需要创建四个不同的堆。具体如何取决于你现在在做什么。