The razpoloviti modul v Pythonu zagotavlja preproste in hitre (na osnovi binarnega iskanja) funkcije za iskanje elementa na razvrščenem seznamu, iskanje pravilnega položaja za vstavljanje novih elementov in vstavljanje novih elementov, s čimer zagotovite, da seznam ostane razvrščen.
Zakaj potrebujemo modul Bisect?
- Uporabno za operacije binarnega iskanja za iskanje po razvrščenem seznamu in za iskanje točk vstavljanja.
- Zagotavlja učinkovite metode za vstavljanje elementov v razvrščeni seznam ob ohranjanju vrstnega reda.
- Izogne se potrebi po ročnem razvrščanju po vsakem vstavljanju, kar prihrani čas in trud.
- Ponuja funkcije, kot sta bisect() bisect_left() bisect_right() in insort() za čisto optimizirano kodo.
- Idealno za naloge, kot je vzdrževanje razvrščenih podatkov na lestvicah najboljših, ali kateri koli scenarij, ki vključuje vstavljanje/iskanje razvrščenih podatkov.
Osnovne funkcije modula Bisect
Bisect modul ponuja predvsem dve vrsti funkcionalnosti:
- Iskanje točke vstavljanja (brez vstavljanja)
- Vstavljanje elementov na pravilen položaj
1. Iskanje vstavnih točk
Te funkcije vrnejo indeks, kamor je treba vstaviti nov element, da ohrani seznam razvrščen.
a) bisect.bisect(): Vrne skrajno desno točko vstavljanja za element. Če element že obstaja, bo točka vstavljanja za obstoječimi vnosi.
bisect.bisect(list num beg=0 end=len(list))
Parameter:
- seznam: Razvrščen seznam.
- št.: Element za vstavljanje.
- prosim: Začni indeks za iskanje (neobvezno).
- konec: Končni indeks za iskanje (neobvezno).
b) bisect.bisect_left(): Vrne skrajno levo točko vstavljanja za element. Če element obstaja, bo točka vstavljanja pred obstoječimi vnosi.
abstraktni razred java
bisect.bisect_left(list num beg=0 end=len(list))
c) bisect.bisect_right(): Enako kot bisect.bisect() vrne skrajno desno točko vstavljanja.
bisect.bisect_right(list num beg=0 end=len(list))
primer: Poiščite indekse vstavljanja za vrednost 4 na razvrščenem seznamu z uporabo različnih razpolovljenih funkcij.
Pythonimport bisect li = [1 3 4 4 4 6 7] print(bisect.bisect(li 4)) # right print(bisect.bisect_left(li 4)) # left print(bisect.bisect_right(li 4 0 4)) # subright
Izhod
5 2 4
Pojasnilo:
- razpolovi (li 4): Vrne 5, ker najde skrajni desni položaj za zadnjimi 4 na seznamu (indeks 4), tako da je točka vstavljanja 5.
- razpolovitev_levo(li 4): Vrne 2, ker najde skrajno levi položaj pred prvimi 4 na seznamu (indeks 2).
- razpolovitev_desno(li 4 0 4): Deluje samo na podseznamu to[0:4] in vrne 4, ker vstavi 4 za zadnje 4 na podseznamu.
2. Vstavljanje elementov
Te funkcije vstavijo element na pravilen položaj, da ohranijo razvrščanje.
a) bisect.insort(): Vstavi element na skrajni desni položaj. Za razliko od funkcij bisect() ta dejansko spremeni seznam tako, da vstavi element.
bisect.insort(list num beg=0 end=len(seznam))
Parameter:
- seznam: Razvrščen seznam.
- št.: Element za vstavljanje.
- prosim (neobvezno): Začetni indeks za vstavljanje (privzeto 0).
- konec (neobvezno): Končni indeks za vstavljanje (privzeta len(seznam)).
b) bisect.insort_left(): Vstavi element na skrajni levi položaj.
bisect.insort_left(list num beg=0 end=len(seznam))
javac ni prepoznan
c) bisect.insort_right(): Vstavi element na skrajni desni položaj (podobno kot insort()).
bisect.insort_right(list num beg=0 end=len(seznam))
primer: Vstavite vrednost 5 v razvrščeni seznam, pri čemer naj bo razvrščen z različnimi strategijami vstavljanja.
Pythonimport bisect l1 = [1 3 4 4 4 6 7] l2 = [1 3 4 4 4 6 7] l3 = [1 3 4 4 4 6 7] bisect.insort(l1 5) # right print(l1) bisect.insort_left(l2 5) # left print(l2) bisect.insort_right(l3 5 0 4) # subright print(l3)
Izhod
[1 3 4 4 4 5 6 7] [1 3 4 4 4 5 6 7] [1 3 4 4 5 4 6 7]
Pojasnilo:
- vstati (l1 5) vstavi 5 na najbolj desno mesto – za vsemi 4 in pred 6.
- vstavi_levo(l2 5) vstavi 5 na skrajno levo primerno mesto – enako kot vstavi tukaj, ker 5 ni na seznamu.
- insort_right(l3 5 0 4) vstavi 5 pri indeksu 4 in deluje samo na podseznamu l3[0:4] = [1 3 4 4] za zadnjim ≤ 5 v tem obsegu, ne da bi to vplivalo na preostali del seznama.