合并python中的排序列表


问题内容

我有一堆排序的对象列表和一个比较函数

class Obj :
    def __init__(p) :
        self.points = p
def cmp(a, b) :
    return a.points < b.points

a = [Obj(1), Obj(3), Obj(8), ...]
b = [Obj(1), Obj(2), Obj(3), ...]
c = [Obj(100), Obj(300), Obj(800), ...]

result = magic(a, b, c)
assert result == [Obj(1), Obj(1), Obj(2), Obj(3), Obj(3), Obj(8), ...]

哪些呢magic样子?我当前的实现是

def magic(*args) :
    r = []
    for a in args : r += a
    return sorted(r, cmp)

但这效率很低。更好的答案?


问题答案:

Python标准库为此提供了一种方法:heapq.merge
如文档所述,它与使用itertools非常相似(但有更多限制);如果您不能承受这些限制(或者如果您不使用Python
2.6),则可以执行以下操作:

sorted(itertools.chain(args), cmp)

但是,我认为它与您自己的解决方案具有相同的复杂性,尽管使用迭代器应该可以提供很好的优化和速度提高。