Cómo usar el módulo Bisect en Python

Cómo usar el módulo Bisect en Python
Este artículo cubrirá una guía sobre el uso del módulo "bisect" disponible en las bibliotecas estandarias de Python. El módulo Bisect se puede usar para ejecutar una variedad de operaciones en la lista Tipo de objetos Itererables disponibles en Python. Todas las muestras de código en este artículo se prueban con Python 3.9.5 en Ubuntu 21.04.

Acerca del módulo de bisectas

El módulo bisectón le permite llamar a varios métodos en una lista de Python y lo ayuda a mantener la lista ordenada. Es especialmente útil si desea modificar elementos de una lista pero al mismo tiempo mantenga su pedido. Por ejemplo, si desea insertar un elemento en una lista, el método de bisect devolverá un índice donde se puede insertar un nuevo elemento de tal manera que después de la inserción, la lista permanecerá ordenada. La sintaxis para los métodos de bisectas se puede entender mejor a través de ejemplos, algunos de ellos están cubiertos a continuación:

Insertar un elemento en una lista utilizando el método Bisect

Eche un vistazo a la muestra de código a continuación:

Importar bisecar
l = [2, 1, 3, 5]
l.clasificar()
i = bisect.Bisecto (L, 4)
Imprimir (i)
l.insertar (i, 4)
Imprimir (L)

La primera declaración importa el módulo "bisect". A continuación se define un objeto de tipo de lista "L". En la siguiente declaración, la lista se clasifica llamando al método de "ordenar". El método de bisecto se llama a la lista en la siguiente línea. El método de bisecto toma dos argumentos, la lista que quiere bisecar y el elemento que debe insertarse en la lista mientras mantiene el orden de clasificación. En este caso, se requiere que el bisecto del método determine en qué número de índice "4" debe insertarse en la lista "L" para que todo se mantenga en orden después de la inserción. La variable "I" mantiene los valores del índice devuelto por el método Bisect. Finalmente, el número 4 se inserta en la lista "L" en el índice "I" llamando al método "Insertar" en la lista.

Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:

3
[1, 2, 3, 4, 5]

El número "3" es el índice en la lista original donde se ha insertado el número 4. Los índices de listas siempre comienzan con cero, por lo tanto, el número 4 se ha insertado en la cuarta posición.

Tenga en cuenta que si ya existe un número en la lista, el método bisect encuentra un índice a la derecha del número existente. Eche un vistazo a la muestra de código a continuación:

Importar bisecar
l = [2, 1, 3, 5, 4]
l.clasificar()
i = bisect.Bisecto (L, 4)
Imprimir (i)
l.insertar (i, 4)
Imprimir (L)

Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:

4
[1, 2, 3, 4, 4, 5]

El módulo bisectas incluye otro método llamado "bisect_right" que es idéntico al método "bisect". Puedes usar estos métodos indistintamente.

Insertar un elemento en una lista desde la izquierda utilizando el método Bisect

Considere la muestra de código a continuación:

Importar bisecar
l = [2, 1, 3, 5, 4, 4]
l.clasificar()
i = bisect.bisect_left (l, 4)
Imprimir (i)
l.insertar (i, 4)
Imprimir (L)

Es casi lo mismo que el ejemplo anterior, excepto que en lugar del método de bisecto, ahora se usa "bisect_left". En el caso de un elemento existente, el método bisect_left encuentra el índice más izquierdo. Puede usar este índice para agregar un nuevo elemento a la izquierda de un elemento emparejado.

Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:

3
[1, 2, 3, 4, 4, 4, 5]

El número 4 se agrega en el índice 3, es decir, en la 4ta posición en la lista ya que el índice siempre comienza con cero. Si usa el método bisect o bisect_right en su lugar, el índice devuelto será diferente. Eche un vistazo a la muestra de código a continuación:

Importar bisecar
l = [2, 1, 3, 5, 4, 4]
l.clasificar()
i = bisect.bisect_right (l, 4)
Imprimir (i)
l.insertar (i, 4)
Imprimir (L)

Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:

5
[1, 2, 3, 4, 4, 4, 5]

Usando el método de insortes

El módulo bisectante también proporciona métodos "insortes" e "insorter_left" que pueden usarse para insertar directamente elementos en una lista en las posiciones apropiadas. También puede usar el método "Insort_right" en lugar del método ISNORT. Eche un vistazo a la muestra de código a continuación:

Importar bisecar
l = [2, 1, 3, 5, 4, 4]
l.clasificar()
bisecar.Insorter (L, 4)
Imprimir (L)

La muestra de código es muy similar a los ejemplos anteriores. El método de insortes toma dos argumentos: la lista que se modificará y el elemento que se insertará en la posición apropiada. No es necesario llamar al método "Insertar" en la lista para insertar manualmente el elemento en la lista en el índice coincidente.

Después de ejecutar la muestra de código anterior, debe obtener la siguiente salida:

[1, 2, 3, 4, 4, 4, 5]

El método de insortes es solo un método de conveniencia que es equivalente a la siguiente declaración de Python (suponiendo que "L" es una lista ordenada):

l.insertar (bisecar.Bisecto (L, 4), 4)

Entonces, debajo del capó, el insorto sigue las mismas reglas que los métodos Bisect, Bisect_right y Bisect_Left.

Conclusión

Como el módulo Bisect proporciona métodos para modificar una lista insertando elementos en él mientras mantiene el orden de clasificación, se elimina mucho código repetitivo donde puede tener que clasificar constantemente una lista después de hacer modificaciones. Según los documentos oficiales de Python, Bisect Method proporciona mejoras sobre otros enfoques de uso común, especialmente cuando una lista tiene una gran cantidad de elementos.