python - 多个排序列表的最快联合,删除重复项并获得有序结果

标签 python python-3.x

当有一个列表列表时,其中所有子列表都已排序,例如: [[1,3,7,20,31], [1,2,5,6,7], [2,4,25,26]] 获得这些列表的并集而不包含重复项并获得有序结果的最快方法是什么? 所以结果列表应该是: [1,2,3,4,5,6,7,20,25,26,31]。 我知道我可以将它们全部合并而不重复,然后对它们进行排序,但是是否有更快的方法(例如:在进行合并时进行排序)内置于 python 中?

编辑:

建议的答案是否比对所有子列表成对执行以下算法更快?

SOLUTION. UNION(x, y)
1 个回答<-()
2 当 x != NIL 且 y != NIL
3 如果 docID(x) = docID(y) 则执行
4 然后 ADD(answer, docID(x))
5 x<-下一个(x)
6 年<-下一个(y)
7 else if docID(x) 8 然后 ADD(answer, docID(x))
9 x<-下一个(x)
10 else ADD(answer, docID(y))
11 y<-下一个(y)
12 返回(答案)

最佳答案

您可以使用heapq.merge为此:

from heapq import merge

def mymerge(v):
    last = None
    for a in merge(*v):
        if a != last:  # remove duplicates
            last = a
            yield a

print(list(mymerge([[1,3,7,20,31], [1,2,5,6,7], [2,4,25,26]])))
# [1, 2, 3, 4, 5, 6, 7, 20, 25, 26, 31]

关于python - 多个排序列表的最快联合,删除重复项并获得有序结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59361649/

相关文章:

python - 如果键值存在则返回父字典

python - 让异常自己产生

python - Pygame 中鼠标的对象移动不准确

python - 如何使用列表作为 Pandas 数据框中的值?

python - 在python中向贝塞尔图添加多条线

python - 如何使用子进程与 python 脚本交互

python - 如何检查所有给定点(空间中)是否位于同一条线上?

python - 这个过程的逻辑是什么

python-3.x - Python Flask 分页错误 :paginated page returned 404

sqlite - 更新时创建 Sqlite 数据库补丁