bisect_left y bisect_right
Encuentre puntos de inserción en una lista ordenada
bisect_left y bisect_right es una lección gratuita de Competitive Programming Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Competitive Programming Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Competitive Programming Academy incluye 4 lecciones en total.
Busque sin código repetitivo
El módulo bisect de Python le proporciona una búsqueda binaria probada para listas ordenadas. No escribir el bucle manualmente significa no tener que depurar errores de desfase de uno.
import bisectPuntos de inserción, no booleanos
En lugar de devolver verdadero o falso, bisect devuelve un índice donde se insertaría un valor para mantener la lista ordenada. Ese índice es su verdadera ventaja.
a = [1, 3, 3, 3, 7]bisect_left se inclina a la izquierda
bisect_left devuelve la primera posición en la que podría colocarse el valor. Con duplicados, queda antes de todos los elementos iguales, nunca después.
bisect.bisect_left(a, 3) # 1bisect_right se inclina a la derecha
bisect_right devuelve la posición justo después del último elemento igual. Con duplicados, queda después de todos los valores coincidentes.
bisect.bisect_right(a, 3) # 4Cuente los elementos iguales
Reste ambos para contar duplicados de un valor en O(log n). right menos left proporciona exactamente cuántas veces aparece.
lo = bisect.bisect_left(a, 3)
hi = bisect.bisect_right(a, 3)
print(hi - lo) # 3¿Existía el valor?
Para comprobar la pertenencia, obtenga i con bisect_left y confirme que a[i] es igual al objetivo. Antes, asegúrese de que i no haya alcanzado la longitud de la lista.
i = bisect.bisect_left(a, x)
found = i < len(a) and a[i] == xPrimer elemento mayor o igual que X
bisect_left también encuentra el primer elemento mayor o igual que x. Ese índice señala directamente la respuesta del límite inferior.
i = bisect.bisect_left(a, x) # first >= xPrimer elemento estrictamente mayor
¿Necesita el primer elemento estrictamente mayor que x? bisect_right proporciona directamente ese índice, el equivalente al límite superior.
i = bisect.bisect_right(a, x) # first > xInserte y mantenga el orden
insort encuentra la posición e inserta en una sola llamada, manteniendo la lista ordenada. Resulta práctico al construir una estructura ordenada sobre la marcha.
bisect.insort(a, 5) # a stays sortedBusque dentro de una ventana
Los argumentos opcionales lo y hi restringen la búsqueda a un segmento. Así evita copiar datos cuando solo le interesa un subrango.
bisect.bisect_left(a, x, 2, 5)Claves mediante una lista auxiliar
bisect compara elementos completos, así que para buscar por un campo, cree una lista paralela que contenga solo esas claves y aplique bisect a ella.
keys = [p[0] for p in pairs]
i = bisect.bisect_left(keys, target)Comprobación rápida
Razone sobre los duplicados y los puntos de inserción.
Repaso: domine bisect
Ya puede encontrar puntos de inserción, contar duplicados y localizar límites inferiores y superiores en tiempo logarítmico. Recurra a bisect antes de escribir un bucle. ✨
Preguntas frecuentes
¿La lección «bisect_left y bisect_right» es gratis?
Sí — el texto completo de «bisect_left y bisect_right» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Competitive Programming Academy, actualiza a CoddyKit PRO. El curso de Competitive Programming Academy incluye 4 lecciones en total.
¿Qué aprenderé en «bisect_left y bisect_right»?
Encuentre puntos de inserción en una lista ordenada Practicas Competitive Programming Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Competitive Programming Academy?
No se requiere experiencia previa. Competitive Programming Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «bisect_left y bisect_right»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Competitive Programming Academy?
Sí. Cada lección de Competitive Programming Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Búsqueda binaria clásica sin errores
- bisect_left y bisect_right
- First True: búsqueda binaria por predicado
- Búsqueda binaria sobre la respuesta