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
你可以使用searchsorted和insert:
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)
只需使用内置sort方法即可。它实现了timsort. 如果列表差不多排序的话,速度会非常快。
a.extend(b)
a.sort()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5584 次 |
| 最近记录: |