1

在文档中,它提到它可能是元组。但它可以是列表吗?如果是,那么优先级是否默认由列表的第一个元素决定?因为在文档中的 Priority Queue Implementation Notes 中,他们已经用 list 来说明了吗?

4

1 回答 1

0

Python 允许您堆化任何 Python可迭代对象(列表、元组、字符串等)。

因此,是的,列表和元组可以用作元素,而不仅仅是整数,但前提是可迭代对象可以支持其元素之间按字典顺序进行的有效比较。让我们把手弄脏。

>>> a = (0, "hello")
>>> b = (1, "word")
>>> array = [a, b]
>>> heapq.heapify(array)
>>> heapq.heappop(array)
(0, 'hello')

一切看起来都不错,我们能够堆积一个元组列表,其中每个元组包含一个 int 和一个字符串。让我们看另一个例子:

>>> a = (0, "hello")
>>> b = ("word", 1)
>>> array = [a, b]
>>> heapq.heapify(array)
>>> heapq.heapify(array)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'int' and 'str'

如您所见,python 解释器开始抱怨,因为它无法比较 int 和 str。

出于同样的原因,您将无法堆化字典列表 (List[Dict]),但您将能够堆化 int 列表 (List[int]) 甚至是 int 列表列表 (List [列表[int]])。这是证明:

>>> a = {0:'hello', 1:'world'}
>>> b = {0:'hola', 1:'mundo'}
>>> array = [a, b]
>>> heapq.heapify(array)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'dict' and 'dict'
>>>
>>>
>>> a = [1,2,3,4]
>>> b = [5,6,7]
>>> array = [a, b]
>>> heapq.heapify(array)
>>> heapq.heappop(array)
[1, 2, 3, 4]
于 2020-01-01T03:35:48.277 回答