当有一个列表列表时,其中所有子列表都已排序,例如:
[[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)
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/