5 minutos o menos: Modulo bisect en Python

“5 minutos o menos”, es una sección del blog, en la cual te enseño algo sobre Python, y que no duraras mucho en leer.
Hola amigos de Internet. Mi nombre es Luis, y les doy la bienvenida a Mi Diario Python.
En el articulo de hoy, veremos como utilizar el modulo bisect de Python para mantener una lista ordenada a medida que se insertan los datos.
Sí, sí, ya lo se. En Python tenemos la función sort para ordenar elementos de una lista.
Pero utilizar bisect es mucho más eficiente. Con bisect, los
datos se ordenan al introducirlos en la lista. Mucho mejor que llamar a sort cada vez que se inserte un nuevo dato.
Sin más preámbulos, comencemos.
El modulo bisect, utiliza un algoritmo de bisección para mantener una lista ordenada a la vez que se insertan nuevos datos.
Veamos los métodos que nos proporciona bisect.

bisect.bisect

El método bisect recibe como parámetros: una lista, y un nuevo elemento.
bisect retorna el índice en el cual el elemento debería insertarse para mantener la lista ordenada.
Recalco que, este método no inserte el elementos, solo nos devuelve el índice en el cual este debería introducirse.
Veamos un ejemplo:
>>> import bisect
>>> lista = [1,3,5,6]
>>> bisect.bisect(lista, 2)
1
>>>
Como pueden observar, el método a retornado el indice en el cual se debe insertar el elemento 2.
Y te preguntaras… de que me sirve esto?.
Por que explicártelo si te puedo mostrar un ejemplo:
>>> def ordenar_al_insertar(lista, elemento):
...  indice = bisect.bisect(lista, elemento)
...  lista.insert(indice, elemento)
>>> nums = [1,7,9,10]
>>> ordenar_al_insertar(nums, 8)
>>> print(nums)
[1,7,8,9,10]
Muy ingenioso No?. Como pueden observar, he utilizado el método insert, el cual recibe como parámetros el indice y el elemento a insertar.

bisect.insort

El método insort es el que hace la magia. Realiza lo que hace la función que he escrito anteriormente. Ordena los datos al insertarlos.
El método, igual que bisect, recibe una lista y el elemento a insertar.
>>> nums = [23,56,78,100]
>>> bisect.insort(nums, 96)
>>> print(nums)
[23,56,78,96,100]
Excelente, todo esta ordenado, como debe estar.
¿Alguna duda? ¿Alguna sugerencia? Déjanos tu comentario y con mucho gusto te responderemos.
Sin más nada que decir. Mi nombre es Luis, y fue un placer compartir mis conocimientos con todos ustedes :D.
  1. Anónimo dice:

    Gracias, muy interesante el modulo.
    Saludos

  2. Fernando Gabriel dice:

    No deberia ser bisect.insort en el último ejemplo?

    1. Luis Salcedo dice:

      Hola Fernando. Sí, me he equivocado. Pero ya lo he solucionado. Muchas gracias por la observación. Saludos.

  3. Sergi dice:

    Hola.
    En el segundo ejemplo, el del método "insort" puede ser que te hayas equivocado y hayas vuelto a utilizar el método "bisect".

    Si no es así... no entiendo el segundo ejemplo/método.

    Saludos y gracias.

    1. Luis Salcedo dice:

      Hola Sergio. Sí, el método es insort. Me he equivocado. Pero ya lo he cambiado. Muchas gracias por la observación. Saludos.

  4. Unknown dice:

    Muchisimas gracias. Hace un tiempo debía ordenar una matriz y me hubiera sido muy util este ejemplo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir
White Monkey