Come usare il modulo bisetto in Python

Come usare il modulo bisetto in Python
Questo articolo coprirà una guida sull'uso del modulo "Bisect" disponibile nelle librerie standard incorporate di Python. Il modulo Bisect può essere utilizzato per eseguire una varietà di operazioni sull'elenco Tipo Ideble Objects Disponibili in Python. Tutti i campioni di codice in questo articolo sono testati con Python 3.9.5 su Ubuntu 21.04.

Sul modulo bisetto

Il modulo Bisect ti consente di chiamare vari metodi in un elenco di Python e ti aiuta a mantenere la lista ordinata. È particolarmente utile se si desidera modificare gli elementi di un elenco ma allo stesso tempo conservare il suo ordine. Ad esempio, se si desidera inserire un elemento in un elenco, il metodo bisetto restituirà un indice in cui un nuovo elemento può essere inserito in modo tale che dopo l'inserimento, l'elenco rimarrà ordinato. La sintassi per i metodi bisetti può essere meglio compresa attraverso esempi, alcuni di essi sono coperti di seguito:

Inserimento di un elemento in un elenco usando il metodo Bisect

Dai un'occhiata al campione di codice di seguito:

Importazione in due
L = [2, 1, 3, 5]
l.ordinare()
i = bisect.Bisect (L, 4)
Stampa (i)
l.Inserisci (i, 4)
Stampa (L)

La prima istruzione importa il modulo "Bisect". Successivamente è definito un oggetto di tipo elenco "L". Nella dichiarazione successiva, l'elenco viene ordinato chiamando il metodo "ordina" su di esso. Il metodo bisetto è chiamato sull'elenco nella riga successiva. Il metodo Bisect prende due argomenti, l'elenco che desidera in due e l'elemento che deve essere inserito nell'elenco mantenendo l'ordine di ordinamento. In questo caso, il metodo Bisect è chiamato a determinare quale numero dell'indice "4" dovrebbe essere inserito nell'elenco "L" in modo che tutto sia mantenuto in ordine dopo l'inserimento. La variabile "i" mantiene i valori dell'indice restituiti con il metodo bisetto. Infine, il numero 4 viene inserito nell'elenco "L" all'indice "I" chiamando il metodo "inserisci" nell'elenco.

Dopo aver eseguito il campione di codice sopra, è necessario ottenere il seguente output:

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

Il numero "3" è l'indice nell'elenco originale in cui è stato inserito il numero 4. Gli indici dell'elenco iniziano sempre con zero, quindi il numero 4 è stato inserito in 4a posizione.

Si noti che se un numero esiste già nell'elenco, il metodo bisetto trova un indice a destra del numero esistente. Dai un'occhiata al campione di codice di seguito:

Importazione in due
L = [2, 1, 3, 5, 4]
l.ordinare()
i = bisect.Bisect (L, 4)
Stampa (i)
l.Inserisci (i, 4)
Stampa (L)

Dopo aver eseguito il campione di codice sopra, è necessario ottenere il seguente output:

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

Il modulo Bisect include un altro metodo chiamato "Bisect_Right" che è identico al metodo "Bisect". Puoi usare questi metodi in modo intercambiabile.

Inserimento di un elemento in un elenco da sinistra usando il metodo bisetto

Considera il campione di codice di seguito:

Importazione in due
L = [2, 1, 3, 5, 4, 4]
l.ordinare()
i = bisect.bisect_left (l, 4)
Stampa (i)
l.Inserisci (i, 4)
Stampa (L)

È quasi lo stesso dell'esempio precedente, tranne per il fatto che invece del metodo bisetto, "Bisect_left" è ora utilizzato. In caso di elemento esistente, il metodo Bisect_left trova l'indice più a sinistra. È possibile utilizzare questo indice per aggiungere un nuovo elemento a sinistra di un elemento abbinato.

Dopo aver eseguito il campione di codice sopra, è necessario ottenere il seguente output:

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

Il numero 4 viene aggiunto all'indice 3, cioè alla quarta posizione nell'elenco poiché l'indice inizia sempre con zero. Se si utilizza invece il metodo Bisect o Bisect_Right, l'indice restituito sarà diverso. Dai un'occhiata al campione di codice di seguito:

Importazione in due
L = [2, 1, 3, 5, 4, 4]
l.ordinare()
i = bisect.bisect_right (l, 4)
Stampa (i)
l.Inserisci (i, 4)
Stampa (L)

Dopo aver eseguito il campione di codice sopra, è necessario ottenere il seguente output:

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

Utilizzando il metodo Insort

Il modulo bisetto fornisce anche metodi "insort" e "insort_left" che possono essere utilizzati per inserire direttamente elementi in un elenco in posizioni appropriate. Puoi anche utilizzare il metodo "insort_right" al posto del metodo isNort. Dai un'occhiata al campione di codice di seguito:

Importazione in due
L = [2, 1, 3, 5, 4, 4]
l.ordinare()
Bisetto.insort (L, 4)
Stampa (L)

Il campione di codice è molto simile agli esempi precedenti. Il metodo insort richiede due argomenti: l'elenco da modificare e l'elemento da inserire nella posizione appropriata. Non è necessario invocare il metodo "inserisci" nell'elenco per inserire manualmente l'elemento nell'elenco nell'indice abbinato.

Dopo aver eseguito il campione di codice sopra, è necessario ottenere il seguente output:

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

Il metodo Insort è solo un metodo di convenienza equivalente alla seguente dichiarazione di Python (supponendo che "L" sia un elenco ordinato):

l.Inserisci (bisetto.Bisect (L, 4), 4)

Quindi, sotto il cofano, Insort segue le stesse regole dei metodi Bisect, Bisect_Right e Bisect_Left.

Conclusione

Poiché il modulo Bisect fornisce metodi per modificare un elenco inserendo elementi in esso mantenendo l'ordine di ordinamento, viene rimosso un sacco di codice ripetitivo in cui è possibile ordinare costantemente un elenco dopo averlo apportato modifiche. Secondo i documenti ufficiali di Python, il metodo Bisect fornisce miglioramenti rispetto ad altri approcci comunemente usati, specialmente quando un elenco ha un gran numero di elementi.