Python 如何使用“heapq.merge”?

Python 如何使用“heapq.merge”?,python,python-3.x,merge,heapq,Python,Python 3.x,Merge,Heapq,以下是我一直在尝试的片段: >>> L1 = [i for i in range(10) if i % 2 == 0] >>> L2 = [j for j in range(10) if j % 2] >>> import heapq >>> [k for k in heapq.merge(L1, L2)] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> [k for k in h

以下是我一直在尝试的片段:

>>> L1 = [i for i in range(10) if i % 2 == 0]
>>> L2 = [j for j in range(10) if j % 2]

>>> import heapq
>>> [k for k in heapq.merge(L1, L2)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> [k for k in heapq.merge(L1, L2, reverse=True)]
[1, 3, 5, 7, 9, 0, 2, 4, 6, 8]
我期待着
[9,8,7,6,5,4,3,2,1,0]
,因为
reverse=True
。我做错了什么?

谢谢你的评论。我想出来了。不过这是一条非常迂回的路

>>> L1 = [i for i in range(10) if i % 2 == 0]
>>> L2 = [j for j in range(10) if j % 2]
>>> M = [k for k in heapq.merge(sorted(L1, reverse=True), sorted(L2, reverse=True), reverse=True)]
>>> M
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
对于合并按升序排序但输出应按降序排序的两个列表,这似乎要简单得多:

>>> sorted(L1 + L2, reverse=True)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
在文档中:“reverse是一个布尔值。如果设置为True,则输入元素将被合并,就像每个比较都被反转一样。为了实现类似于排序的行为(itertools.chain(*iterables),reverse=True),所有iterables必须从最大到最小排序。”因此,在每个步骤中,合并在每个列表的开头生成两个可用数字中最大的一个。