Jak używać modułu Bisect w Pythonie

Jak używać modułu Bisect w Pythonie
W tym artykule obejmie przewodnik po użyciu modułu „Bisect” dostępnego w standardowych wbudowanych bibliotekach Pythona. Moduł Bisect może być używany do uruchamiania różnych operacji na typach listy iterowalnych obiektów dostępnych w Python. Wszystkie próbki kodu w tym artykule są testowane z Python 3.9.5 na Ubuntu 21.04.

O module Bisect

Moduł Bisect pozwala wywołać różne metody na liście Python i pomaga utrzymać sortowaną listę. Jest to szczególnie przydatne, jeśli chcesz zmodyfikować elementy listy, ale jednocześnie zachować zamówienie. Na przykład, jeśli chcesz wstawić element na liście, metoda podziału zwróci indeks, w którym nowy element można wstawić w taki sposób. Składnia metod podziału można najlepiej zrozumieć za pomocą przykładów, niektóre z nich są omówione poniżej:

Wstawienie elementu do listy za pomocą metody Bisect

Spójrz na poniższą próbkę kodu:

importować bisect
L = [2, 1, 3, 5]
L.sortować()
I = Bisect.Bisect (L, 4)
Drukuj (i)
L.Wstaw (I, 4)
Drukuj (L)

Pierwsze oświadczenie importuje moduł „Distect”. Następnie zdefiniowany jest obiekt typu listy „L”. W następnym oświadczeniu lista jest sortowana, wywołując metodę „sortowania”. Metoda bisect jest wywoływana na liście w następnym wierszu. Metoda Bisect bierze dwa argumenty, lista, którą chce podzielić, i element, który należy wprowadzić na liście, zachowując kolejność sortowania. W takim przypadku bisekt metody jest wezwany do ustalenia, w jakim numerze indeksu „4” należy włożyć na liście „L”, aby wszystko było przechowywane po wprowadzeniu. Zmienna „i” utrzymuje wartości wskaźnika zwrócone metodą Bisect. Wreszcie, numer 4 jest wstawiany na liście „L” na indeksie „I”, wywołując metodę „Wstaw” na liście.

Po uruchomieniu powyższej próbki kodu należy uzyskać następujące dane wyjściowe:

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

Numer „3” to indeks na oryginalnej liście, w której włożono numer 4. Indeksy list zawsze zaczynają się od zera, stąd liczba 4 została wstawiona na 4. pozycji.

Zauważ, że jeśli liczba już istnieje na liście, metoda Bisect znajduje indeks po prawej stronie istniejącej liczby. Spójrz na poniższą próbkę kodu:

importować bisect
L = [2, 1, 3, 5, 4]
L.sortować()
I = Bisect.Bisect (L, 4)
Drukuj (i)
L.Wstaw (I, 4)
Drukuj (L)

Po uruchomieniu powyższej próbki kodu należy uzyskać następujące dane wyjściowe:

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

Moduł Bisect zawiera inną metodę o nazwie „Bisect_right”, która jest identyczna z metodą „Bisect”. Możesz użyć tych metod zamiennie.

Wstawienie elementu do listy od lewej za pomocą metody Bisect

Rozważ próbkę kodu poniżej:

importować bisect
L = [2, 1, 3, 5, 4, 4]
L.sortować()
I = Bisect.Bisect_Left (L, 4)
Drukuj (i)
L.Wstaw (I, 4)
Drukuj (L)

Jest prawie taki sam jak poprzedni przykład, z wyjątkiem tego, że zamiast metody bisekty. W przypadku istniejącego elementu metoda Bisect_Left znajduje najwcześniejszy wskaźnik. Możesz użyć tego indeksu, aby dodać nowy element po lewej stronie dopasowanego elementu.

Po uruchomieniu powyższej próbki kodu należy uzyskać następujące dane wyjściowe:

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

Liczba 4 jest dodawana przy indeksie 3, to znaczy na czwartej pozycji na liście, ponieważ indeks zawsze zaczyna się od zera. Jeśli zamiast tego użyjesz metody Bisect lub Bisect_right, zwrócony indeks będzie inny. Spójrz na poniższą próbkę kodu:

importować bisect
L = [2, 1, 3, 5, 4, 4]
L.sortować()
I = Bisect.Bisect_right (L, 4)
Drukuj (i)
L.Wstaw (I, 4)
Drukuj (L)

Po uruchomieniu powyższej próbki kodu należy uzyskać następujące dane wyjściowe:

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

Za pomocą metody Import

Moduł Bisect zapewnia również metody „Import” i „insort_left”, które można użyć do bezpośredniej wstawienia elementów do listy w odpowiednich pozycjach. Możesz także użyć metody „insort_right” zamiast metody ISnort. Spójrz na poniższą próbkę kodu:

importować bisect
L = [2, 1, 3, 5, 4, 4]
L.sortować()
przepoławiać.Import (L, 4)
Drukuj (L)

Próbka kodu jest bardzo podobna do wcześniejszych przykładów. Metoda Import bierze dwa argumenty: lista do modyfikowania i elementu do wprowadzenia w odpowiednim miejscu. Nie ma potrzeby wzywania metody „wstaw” na liście, aby ręcznie wstawić element na liście w dopasowanym indeksie.

Po uruchomieniu powyższej próbki kodu należy uzyskać następujące dane wyjściowe:

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

Metoda Import jest tylko metodą wygody, która jest równoważna następującemu stwierdzeniu Pythona (zakładając, że „L” jest posortowaną listą):

L.wstaw (przebity.Bisect (L, 4), 4)

Tak więc pod maską, Insort przestrzega tych samych zasad, co metody Bisect, Bisect_Right i Bisect_Left.

Wniosek

Ponieważ moduł Bisect dostarcza metody modyfikacji listy poprzez wkładanie w nią elementów, zachowując kolejność sortowania, wiele powtarzających się kodu jest usuwanych tam, gdzie może być konieczne sortowanie listy po dokonaniu modyfikacji. Według oficjalnych dokumentów Pythona metoda Bisect zapewnia ulepszenia w stosunku do innych powszechnie stosowanych podejść, szczególnie gdy lista ma dużą liczbę elementów.