当前位置: 代码迷 >> 综合 >> Python bisect - array bisection library
  详细解决方案

Python bisect - array bisection library

热度:21   发布时间:2024-01-11 02:32:51.0

Python的bisect模块是内置模块,bisect模块实现了一个算法用于插入元素到有序列表。

在一些情况下,这比反复排序列表或构造一个大的列表再排序的效率更高。Bisect是二分法的意思,这里使用二分法排序,将待插入的元素插入到合适的位置

 

bisect模块提供了如下几个函数:

(下面函数中的lo和hi用于指定列表的区间,默认的是整个列表)


bisect.bisect_left(a, x, lo=0, hi=len(a))   返回将x插入到列表a中的索引位置,如果已有x,则返回第一个x的位置

bisect.bisect_right(a, x, lo=0, hi=len(a)) 返回将x插入到列表a中的索引位置,如果已有x,则返回最后一个x位置的下一个位置

bisect.bisect(a, x, lo=0, hi=len(a))         与bisect_right相同

 

bisect.insort_left(a, x, lo=0, hi=len(a))   将x插入到列表a中,如果已有x,插入到所有x的最左边

bisect.insort_right(a, x, lo=0, hi=len(a)) 将x插入到列表a中,如果已有x,插入到所有x的最右边

bisect.insort(a, x, lo=0, hi=len(a))         与insort_right相同

 

下面看个例子:

[python]  view plain  copy
 print ?
  1. >>> import bisect  
  2. >>> import random  
  3. >>> mylist = list()  
  4. >>> for i in range(10):  
  5.         num = random.randint(1,100)  
  6.         index = bisect.bisect_left(mylist, num)  
  7.         bisect.insort_left(mylist, num)  
  8.         print('num  ', str(num), '\tindex  ', str(index), '\tlist ', mylist)  
  9.   
  10. num   37    index   0   list  [37]  
  11. num   31    index   0   list  [3137]  
  12. num   82    index   2   list  [313782]  
  13. num   27    index   0   list  [27313782]  
  14. num   62    index   3   list  [2731376282]  
  15. num   83    index   5   list  [273137628283]  
  16. num   83    index   5   list  [27313762828383]  
  17. num   87    index   7   list  [2731376282838387]  
  18. num   98    index   8   list  [273137628283838798]  
  19. num   99    index   9   list  [27313762828383879899]  
  20.   
  21. >>> mylist = list()  
  22. >>> for i in range(10):  
  23.         num = random.randint(1,100)  
  24.         index = bisect.bisect_right(mylist, num)  
  25.         bisect.insort_right(mylist, num)  
  26.         print('num  ', str(num), '\tindex  ', str(index), '\tlist ', mylist)  
  27.   
  28. num   85    index   0   list  [85]  
  29. num   73    index   0   list  [7385]  
  30. num   82    index   1   list  [738285]  
  31. num   36    index   0   list  [36738285]  
  32. num   80    index   2   list  [3673808285]  
  33. num   4     index   0   list  [43673808285]  
  34. num   79    index   3   list  [4367379808285]  
  35. num   6     index   1   list  [46367379808285]  
  36. num   64    index   3   list  [4636647379808285]  
  37. num   25    index   2   list  [462536647379808285]  
  38.   
  39. >>> mylist = list()  
  40. >>> for i in range(10):  
  41.         num = random.randint(1,100)  
  42.         index = bisect.bisect(mylist, num)  
  43.         bisect.insort(mylist, num)  
  44.         print('num  ', str(num), '\tindex  ', str(index), '\tlist ', mylist)  
  45.   
  46. num   25    index   0   list  [25]  
  47. num   28    index   1   list  [2528]  
  48. num   81    index   2   list  [252881]  
  49. num   9     index   0   list  [9252881]  
  50. num   29    index   3   list  [925282981]  
  51. num   66    index   4   list  [92528296681]  
  52. num   34    index   4   list  [9252829346681]  
  53. num   60    index   5   list  [925282934606681]  
  54. num   61    index   6   list  [92528293460616681]  
  55. num   3     index   0   list  [392528293460616681]  




  相关解决方案