将值插入到已排序的数组中

use*_*178 5 python sorting algorithm list insert

在已排序的 numpy 数组中将值插入正确位置的最快方法是什么?

例如,我想插入binto 的每个值a

a = [1,1,2,4,7,7,11,13,13,13,15,20,25,26,27,30,45,70]

b = [5,7,9,45]
Run Code Online (Sandbox Code Playgroud)

我试过遍历a每个值b并以这种方式插入。我也试过bisect_left方法:

for i in b:
a.insert(bisect_left(a,i),i)
Run Code Online (Sandbox Code Playgroud)

这两种方法都太慢了,因为我要处理数十万个数据元素。

有任何想法吗?

小智 8

你可以使用searchsortedinsert

a = numpy.array([1,1,2,4,7,7,11,13,13,13,15,20,25,26,27,30,45,70])
b = numpy.array([5,7,9,45])
ii = numpy.searchsorted(a, b)
a = numpy.insert(a, ii, b)
Run Code Online (Sandbox Code Playgroud)


the*_*eye 4

只需使用内置sort方法即可。它实现了timsort. 如果列表差不多排序的话,速度会非常快。

a.extend(b)
a.sort()
Run Code Online (Sandbox Code Playgroud)