怎么会呢heapq.合并在python中

2024-09-30 05:29:16 发布

您现在位置:Python中文网/ 问答频道 /正文

即使不生成列表,heapq.merge()如何对列表排序?在

不知道我说的是否清楚。
所以,这是从 Super Ugly Number problem at leetcode。在

还有这个python代码

class Solution(object):
def nthSuperUglyNumber(self, n, primes):
    """
    :type n: int
    :type primes: List[int]
    :rtype: int
    """
    uglies = [1]
    def gen(prime):
        for ugly in uglies:
            yield ugly * prime
    merged = heapq.merge(*map(gen, primes))
    while len(uglies) < n:
        ugly = next(merged)
        if ugly != uglies[-1]:
            uglies.append(ugly)
    return uglies[-1]

让我很难理解。在我搜索了“yield”和“heapq”的概念之后,在while循环中,我仍然没有得到这个结果,merged怎么知道{}不会小于{}。在


Tags: 列表排序deftypemergemergedprimeint
2条回答

heapq.merge的实现是纯Python,如果需要,可以直接read its code。在

从实现它的模块中可以猜到,它使用堆来合并传递的iterable。如果iterables(本例中的生成器)按顺序生成各自的值,那么它将把它们组合在一起,以便它生成的值也按顺序排列。它不能消除重复值,这就是为什么显示的代码检查最新值是否等于前一个值。在

它需要n已经排序的个项目。然后,它可以查看每个值中的最小值并使用它。最小的一个总是第一个项目,然后是第二个项目,然后是第三个项目,因为每个项目都是排序的。在

相关问题 更多 >

    热门问题