除了关于 using 的其他答案bisect.insort
,如果您对性能不满意,您可以尝试使用blist
module with bisect
。它应该提高性能。
传统的list
插入复杂度是O(n)
,而插入blist
的复杂度是O(log(n))
。
此外,您的数组似乎已排序。如果是这样,您可以使用mudule 中的merge
函数heapq
来利用两个数组都已预先排序的事实。由于在内存中创建了一个新数组,因此这种方法会产生开销。这可能是一个考虑的选项,因为这个解决方案的时间复杂度是O(n+m)
,而具有 insort 的解决方案是O(n*m)
复杂的(n 个元素 * m 个插入)
import heapq
a = [1,2,4,5,6,8,9]
b = [3,4,7,10]
it = heapq.merge(a,b) #iterator consisting of merged elements of a and b
L = list(it) #list made of it
print(L)
输出:
[1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10]
如果要删除重复值,可以使用groupby:
import heapq
import itertools
a = [1,2,4,5,6,8,9]
b = [3,4,7,10]
it = heapq.merge(a,b) #iterator consisting of merged elements of a and b
it = (k for k,v in itertools.groupby(it))
L = list(it) #list made of it
print(L)
输出:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]