📜  Python中的等分算法函数bisect

📅  最后修改于: 2020-04-15 13:20:53             🧑  作者: Mango

Python在其定义中使用模块“ bisect ” 提供了bisect算法,该模块允许在插入每个元素后按排序顺序保留列表。这是必不可少的,因为这样可以减少在插入每个元素之后一次又一次地对列表进行排序所需的开销时间。
重要的二等分函数
1. bisect(list,num,beg,end):此函数返回可以在其中插入参数的num的index索引,以使结果列表保持排序顺序。如果元素已经存在于列表中,则返回必须插入元素的最右边位置此函数有4个参数,必须使用的列表,要插入的数值,要考虑的列表中的开始位置,必须考虑的结束位置
2. bisect_left(list,num,beg,end):此函数返回可以在其中插入参数的num的index索引,以使结果列表保持排序顺序。如果元素已经存在于列表中,则返回必须插入元素的最左侧位置此函数有4个参数,必须使用的列表,要插入的数值,要考虑的列表中的开始位置,必须考虑的结束位置
3. bisect_right(list,num,beg,end):该函数的工作方式类似于上面提到的“ bisect() _left“。

# Python代码演示bisect(),bisect_left()和bisect_right()的工作方式
# 导入“bisect"以进行二等分运算
import bisect
# 初始化list
li = [1, 3, 4, 4, 4, 6, 7]
# 使用bisect()查找要插入新元素的索引
# 返回5 ( 最右边的索引 )
print ("要插入的最右边的索引,此列表保持排序  : ", end="")
print (bisect.bisect(li, 4))
# 使用bisect_left()查找索引以插入新元素
# 返回2 ( 最左边的索引 )
print ("要插入的最左边的索引,此列表保持排序  : ", end="")
print (bisect.bisect_left(li, 4))
# 使用bisect_right()查找索引以插入新元素
# 返回4 ( 最右边的索引 )
print ("要插入的最右边的索引,此列表保持排序  : ", end="")
print (bisect.bisect_right(li, 4, 0, 4))

输出:

要插入的最右边的索引,此列表保持排序  : 5
要插入的最左边的索引,此列表保持排序  : 2
要插入的最右边的索引,此列表保持排序  : 4

4. insort(list,num,beg,end):此函数在将num插入适当位置后返回排序后列表,如果列表中已经存在该元素,则该元素将插入最右边的位置。 此函数有4个参数,必须使用的列表,要插入的数值,要考虑的列表中的开始位置,必须考虑的结束位置
5. insort_left(list,num,beg,end)在适当位置插入数字后,此函数返回排序后列表,如果元素已经存在于列表中,则该元素将插入到最左边的位置。 此函数有4个参数,必须使用的列表,要插入的数值,要考虑的列表中的开始位置,必须考虑的结束位置
6. insort_right(list,num,beg,end):该函数的工作方式与上述“ insort()”类似。

# Python代码演示insort(),insort_left()和insort_right()的工作
# 导入“bisect"以进行二等分运算
import bisect
# 初始化list
li1 = [1, 3, 4, 4, 4, 6, 7]
# 初始化list
li2 = [1, 3, 4, 4, 4, 6, 7]
# 初始化list
li3 = [1, 3, 4, 4, 4, 6, 7]
# 使用insort()在适当的位置插入5在第6个位置插入
bisect.insort(li1, 5)
print ("使用insort()插入新元素后的列表为 : ")
for i in range(0, 7):
    print(li1[i], end=" ")
# 使用insort_left()在适当位置插入5
# 插入第6个位置
bisect.insort_left(li2, 5)
print("\r")
print ("使用insort_left()插入新元素后的列表为 : ")
for i in range(0, 7):
    print(li2[i], end=" ")
print("\r")
# 使用insort_right()在适当的位置插入5
# 在第5个位置插入
bisect.insort_right(li3, 5, 0, 4)
print ("使用insort_right()插入新元素后的列表为 : ")
for i in range(0, 7):
    print(li3[i], end=" ")

输出:

使用insort()插入新元素后的列表为 :
1 3 4 4 4 5 6
使用insort_left()插入新元素后的列表为 :
1 3 4 4 4 5 6
使用insort_right()插入新元素后的列表为 :
1 3 4 4 5 4 6