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
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.
-
No deberia ser bisect.insort en el último ejemplo?
-
Hola Fernando. Sí, me he equivocado. Pero ya lo he solucionado. Muchas gracias por la observación. Saludos.
-
-
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.
-
Hola Sergio. Sí, el método es insort. Me he equivocado. Pero ya lo he cambiado. Muchas gracias por la observación. Saludos.
-
-
Muchisimas gracias. Hace un tiempo debía ordenar una matriz y me hubiera sido muy util este ejemplo.
Deja una respuesta
Gracias, muy interesante el modulo.
Saludos