1. Se bisect
utiliza para procesar la secuencia ordenada, es decir, para mantener la secuencia ascendente ordenada.
En la fuente de bisect.py
archivo, que structure
es: insort
, bisect
, insort_right
, insort_left
, bisect_right
, bisect_left
. Implementar de manera aproximada la operación de inserción y la operación de búsqueda (se utilizan dos puntos).
import bisect
#二分查找
inter_list = []
bisect.insort(inter_list, 3)
bisect.insort(inter_list, 2)
bisect.insort(inter_list, 5)
bisect.insort(inter_list, 1)
bisect.insort(inter_list, 6)
print(inter_list) # [1,2,3,5,6]
Puede ver que lo que se devuelve es una secuencia de clasificación completa.
Ahora queremos insertar un nuevo dato y encontrar su posición en la secuencia.
# [1, 2, 3, 5, 6]
print(bisect.bisect(inter_list, 3))
# 3
# 在序列下标为3的位置插入
El código fuente bisect
predeterminado es bisect_right
métodos. Es decir, la siguiente posición del elemento repetido.
bisect_left
Se inserta en la posición anterior del elemento repetido.
# [1, 2, 3, 5, 6]
print(bisect.bisect_left(inter_list, 3))
# 2
2. Subsección
No era inter_list = []
solo una lista que se definió al principio , sino que cualquier tipo de secuencia que se pueda modificar realmente funciona. Por ejemplo, un deque.
import bisect
from collections import deque
inter_list = deque()
bisect.insort(inter_list, 3)
bisect.insort(inter_list, 2)
bisect.insort(inter_list, 5)
bisect.insort(inter_list, 1)
bisect.insort(inter_list, 6)
print(bisect.bisect_left(inter_list, 3))
print(inter_list)
# 2
# deque([1, 2, 3, 5, 6])