Como usar o módulo Bisect no Python

Como usar o módulo Bisect no Python
Este artigo abordará um guia sobre o uso do módulo "Bisect" disponível nas bibliotecas padrão do Python. O módulo Bisect pode ser usado para executar uma variedade de operações no tipo de lista de objetos iteráveis ​​disponíveis no Python. Todas as amostras de código deste artigo são testadas com Python 3.9.5 no Ubuntu 21.04.

Sobre o módulo Bisect

O módulo Bisect permite que você chame vários métodos em uma lista Python e ajuda a manter a lista classificada. É especialmente útil se você deseja modificar elementos de uma lista, mas ao mesmo tempo mantenha seu pedido. Por exemplo, se você deseja inserir um elemento em uma lista, o método Bisect retornará um índice onde um novo elemento pode ser inserido de tal maneira que, após a inserção, a lista permanecerá classificada. A sintaxe para métodos Bisect pode ser melhor compreendida através de exemplos, alguns deles são cobertos abaixo:

Inserir um elemento em uma lista usando o método Bisect

Dê uma olhada no exemplo de código abaixo:

importar bisect
l = [2, 1, 3, 5]
eu.organizar()
i = bisect.Bisect (L, 4)
impressão (i)
eu.inserir (i, 4)
Impressão (L)

A primeira declaração importa o módulo "Bisect". Em seguida, um objeto de tipo de lista “l” é definido. Na próxima declaração, a lista é classificada chamando o método de "classificação". O método Bisect é chamado na lista na próxima linha. O método Bisect leva dois argumentos, a lista que deseja bissectar e o elemento que precisa ser inserido na lista, mantendo a ordem de classificação. Nesse caso, o método bisect é chamado a determinar em que número de índice “4” deve ser inserido na lista “L” para que tudo seja mantido em ordem após a inserção. A variável "i" mantém os valores do índice retornado pelo método Bisect. Finalmente, o número 4 é inserido na lista "L" no índice "I", chamando o método "Inserir" na lista.

Depois de executar a amostra de código acima, você deve obter a seguinte saída:

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

Número “3” é o índice na lista original em que o número 4 foi inserido. Os índices de lista sempre começam com zero, portanto, o número 4 foi inserido na 4ª posição.

Observe que, se um número já existe na lista, o método Bisect encontrará um índice à direita do número existente. Dê uma olhada no exemplo de código abaixo:

importar bisect
l = [2, 1, 3, 5, 4]
eu.organizar()
i = bisect.Bisect (L, 4)
impressão (i)
eu.inserir (i, 4)
Impressão (L)

Depois de executar a amostra de código acima, você deve obter a seguinte saída:

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

O módulo Bisect inclui outro método chamado "bisect_right", que é idêntico ao método "bisect". Você pode usar esses métodos de forma intercambiável.

Inserir um elemento em uma lista da esquerda usando o método Bisect

Considere o exemplo de código abaixo:

importar bisect
l = [2, 1, 3, 5, 4, 4]
eu.organizar()
i = bisect.bisect_left (l, 4)
impressão (i)
eu.inserir (i, 4)
Impressão (L)

É quase o mesmo que o exemplo anterior, exceto que, em vez do método bisect, "bisect_left" agora é usado. No caso de um elemento existente, o método bisect_left encontra o índice mais à esquerda. Você pode usar este índice para adicionar um novo elemento à esquerda de um elemento correspondente.

Depois de executar a amostra de código acima, você deve obter a seguinte saída:

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

O número 4 é adicionado no índice 3, ou seja, na 4ª posição na lista, pois o índice sempre começa com zero. Se você usar o método bisect ou bisect_right, o índice retornado será diferente. Dê uma olhada no exemplo de código abaixo:

importar bisect
l = [2, 1, 3, 5, 4, 4]
eu.organizar()
i = bisect.bisect_right (L, 4)
impressão (i)
eu.inserir (i, 4)
Impressão (L)

Depois de executar a amostra de código acima, você deve obter a seguinte saída:

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

Usando o método de insort

O módulo Bisect também fornece métodos "insort" e "insort_left" que podem ser usados ​​para inserir diretamente elementos em uma lista em posições apropriadas. Você também pode usar o método "Insort_right" no lugar do método ISNORT. Dê uma olhada no exemplo de código abaixo:

importar bisect
l = [2, 1, 3, 5, 4, 4]
eu.organizar()
Bisect.insort (L, 4)
Impressão (L)

A amostra de código é muito semelhante aos exemplos anteriores. O método insort leva dois argumentos: a lista a ser modificada e o elemento a ser inserido na posição apropriada. Não há necessidade de chamar o método "Inserir" na lista para inserir manualmente o elemento na lista no índice correspondente.

Depois de executar a amostra de código acima, você deve obter a seguinte saída:

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

O método Insort é apenas um método de conveniência que é equivalente à seguinte declaração Python (assumindo que "l" é uma lista classificada):

eu.inserir (bisect.Bisect (L, 4), 4)

Então, sob o capô, o Insort segue as mesmas regras que os métodos Bisect, Bisect_right e Bisect_Left.

Conclusão

Como o módulo Bisect fornece métodos para modificar uma lista inserindo elementos nele, mantendo a ordem de classificação, muito código repetitivo é removido onde você pode ter que classificar constantemente uma lista depois de fazer modificações nele. De acordo com o Python Docs oficial, o método Bisect fornece melhorias em relação a outras abordagens comumente usadas, especialmente quando uma lista tem um grande número de elementos.