为什么 Python 的 heapq 的元组比较不能正常工作?
Why does Python's heapq's tuple comparison not work as it supposed to?
所以在 Python 当我输入
from heapq import heappush
a=[]
heappush(a,('art zero', 'let3 art zero'))
heappush(a,('own kit dig', 'let2 own kit dig'))
heappush(a,('art can', 'let1 art can'))
print(a)
它给出
[('art can', 'let1 art can'), ('own kit dig', 'let2 own kit dig'), ('art zero', 'let3 art zero')]
不是'own kit dog'>'art zero'吗?为什么heapq中的元组比较在这里不起作用?
堆与排序列表不同。堆只保证一个元素不大于其children的值。
您要比较的两个值是同级值。堆中的兄弟值之间没有特定的关系。你唯一能知道的是,他们俩都不比他们的parent.
为了完整起见,在堆中索引 i 处的值的 children 位于索引 2i+1和 2i+2.
当您从堆中 heappop
值时,您 会 以正确的顺序获取它们。
所以在 Python 当我输入
from heapq import heappush
a=[]
heappush(a,('art zero', 'let3 art zero'))
heappush(a,('own kit dig', 'let2 own kit dig'))
heappush(a,('art can', 'let1 art can'))
print(a)
它给出
[('art can', 'let1 art can'), ('own kit dig', 'let2 own kit dig'), ('art zero', 'let3 art zero')]
不是'own kit dog'>'art zero'吗?为什么heapq中的元组比较在这里不起作用?
堆与排序列表不同。堆只保证一个元素不大于其children的值。
您要比较的两个值是同级值。堆中的兄弟值之间没有特定的关系。你唯一能知道的是,他们俩都不比他们的parent.
为了完整起见,在堆中索引 i 处的值的 children 位于索引 2i+1和 2i+2.
当您从堆中 heappop
值时,您 会 以正确的顺序获取它们。