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.