The rozpoliť modul v Pythone poskytuje jednoduché a rýchle funkcie (založené na binárnom vyhľadávaní) na vyhľadávanie prvku v zoradenom zozname, nájdenie správnej pozície na vloženie nových prvkov a vloženie nových prvkov, čím sa zabezpečí, že zoznam zostane zoradený.
Prečo potrebujeme modul Bisect?
- Užitočné pre binárne operácie vyhľadávania na vyhľadávanie v zoradenom zozname a na nájdenie bodov vloženia.
- Poskytuje efektívne metódy na vkladanie prvkov do zoradeného zoznamu pri zachovaní poradia.
- Vyhýba sa potrebe manuálneho triedenia po každom vložení, čo šetrí čas a námahu.
- Ponúka funkcie ako bisect() bisect_left() bisect_right() a insort() pre čistý optimalizovaný kód.
- Ideálne pre úlohy, ako je udržiavanie údajov zoradených v rebríčkoch alebo akýkoľvek scenár zahŕňajúci vkladanie/vyhľadávanie triedených údajov.
Základné funkcie modulu Bisect
Modul bisect ponúka hlavne dva typy funkcií:
- Nájdenie bodu vloženia (bez vloženia)
- Vkladanie prvkov do správnej polohy
1. Nájdenie bodov vloženia
Tieto funkcie vrátia index, kam by mal byť vložený nový prvok, aby bol zoznam zoradený.
a) bisect.bisect(): Vráti bod vloženia úplne vpravo pre prvok. Ak prvok už existuje, kurzor bude za existujúcimi položkami.
bisect.bisect(list num beg=0 end=len(zoznam))
Parameter:
- zoznam: Zoradený zoznam.
- číslo: Prvok na vloženie.
- prosiť: Spustiť index pre vyhľadávanie (voliteľné).
- koniec: Koniec indexu pre vyhľadávanie (voliteľné).
b) bisect.bisect_left(): Vráti bod vloženia úplne vľavo pre prvok. Ak prvok existuje, kurzor bude pred existujúcimi položkami.
string.compareto c#
bisect.bisect_left(list num beg=0 end=len(zoznam))
c) bisect.bisect_right(): Rovnaké ako bisect.bisect() vráti bod vloženia úplne vpravo.
bisect.bisect_right(list num beg=0 end=len(zoznam))
Príklad: Nájdite indexy vloženia pre hodnotu 4 v zoradenom zozname pomocou rôznych funkcií rozdelenia.
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
Výstup
5 2 4
Vysvetlenie:
- rozpoliť (li 4): Vráti 5, pretože nájde pozíciu úplne vpravo po poslednej 4 v zozname (index 4), takže bod vloženia je 5.
- bisect_left(li 4): Vráti 2, pretože nájde pozíciu úplne vľavo pred prvými 4 v zozname (index 2).
- bisect_right(li 4 0 4): Funguje iba na podzozname to[0:4] a vráti 4, pretože vloží 4 za posledné 4 v podzozname.
2. Vkladanie prvkov
Tieto funkcie vkladajú prvok na správnu pozíciu, aby sa zachovalo zoradenie.
a) bisect.insort(): Vloží prvok na miesto úplne vpravo. Na rozdiel od funkcií bisect() to v skutočnosti upravuje zoznam vložením prvku.
bisect.insort(list num beg=0 end=len(zoznam))
Parameter:
- zoznam: Zoradený zoznam.
- číslo: Prvok na vloženie.
- prosiť (voliteľné): Počiatočný index na vkladanie (predvolená hodnota 0).
- koniec (voliteľné): Koncový index pre vloženie (predvolená dĺžka (zoznam)).
b) bisect.insort_left(): Vloží prvok na pozíciu úplne vľavo.
ako dereferencovať ukazovateľ v c
bisect.insort_left(list num beg=0 end=len(zoznam))
c) bisect.insort_right(): Vloží prvok na pozíciu úplne vpravo (podobne ako insort()).
bisect.insort_right(list num beg=0 end=len(zoznam))
Príklad: Vložte hodnotu 5 do zoradeného zoznamu a ponechajte ho zoradený pomocou rôznych stratégií vkladania.
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)
Výstup
[1 3 4 4 4 5 6 7] [1 3 4 4 4 5 6 7] [1 3 4 4 5 4 6 7]
Vysvetlenie:
- vzniknúť(l1 5) zasuňte 5 do pravej najvhodnejšej polohy – po všetkých 4 sekundách a pred 6.
- insort_left(l2 5) vloží 5 na najvhodnejšiu pozíciu vľavo – rovnako ako tu vložiť, pretože 5 nie je v zozname.
- insort_right(l3 5 0 4) vloží 5 do indexu 4 a pracuje len s podzoznamom l3[0:4] = [1 3 4 4] za posledným ≤ 5 v tomto rozsahu bez ovplyvnenia zvyšku zoznamu.