Python標(biāo)準(zhǔn)庫(kù)bisect模塊的實(shí)現(xiàn)
Python 的標(biāo)準(zhǔn)庫(kù) bisect 模塊提供了一些用于維護(hù)已排序序列的高效算法,主要基于二分查找(binary search)實(shí)現(xiàn)。它特別適合在需要頻繁插入元素并保持序列有序的場(chǎng)景中使用。
下面是 bisect 模塊中主要的函數(shù)方法及其功能說(shuō)明:
1.bisect.bisect_left(a, x, lo=0, hi=len(a))
- ?功能?:在有序序列
a中查找元素x應(yīng)該插入的位置,以保持序列的有序性。如果x已經(jīng)存在,則返回最左邊的插入位置?(即第一個(gè)大于或等于x的位置)。 - ?參數(shù)?:
a:已排序的序列(通常是列表)。x:要查找插入位置的元素。lo:查找范圍的起始索引(默認(rèn)為 0)。hi:查找范圍的結(jié)束索引(默認(rèn)為len(a))。
- ?返回值?:插入位置的索引。
2.bisect.bisect_right(a, x, lo=0, hi=len(a))
?或等價(jià)于? bisect.bisect(a, x, lo=0, hi=len(a))
- ?功能?:在有序序列
a中查找元素x應(yīng)該插入的位置,以保持序列的有序性。如果x已經(jīng)存在,則返回最右邊的插入位置?(即第一個(gè)大于x的位置)。 - ?參數(shù)?:與
bisect_left相同。 - ?返回值?:插入位置的索引。
?注意?:
bisect_right和bisect是同一個(gè)函數(shù),bisect是bisect_right的別名。
3.bisect.insort_left(a, x, lo=0, hi=len(a))
- ?功能?:將元素
x插入到有序序列a中,保持序列的有序性。如果x已經(jīng)存在,則插入到最左邊的位置(即第一個(gè)大于或等于x的位置)。 - ?參數(shù)?:與
bisect_left相同。 - ?返回值?:無(wú)(直接修改原序列
a)。
4.bisect.insort_right(a, x, lo=0, hi=len(a))
?或等價(jià)于? bisect.insort(a, x, lo=0, hi=len(a))
- ?功能?:將元素
x插入到有序序列a中,保持序列的有序性。如果x已經(jīng)存在,則插入到最右邊的位置(即第一個(gè)大于x的位置)。 - ?參數(shù)?:與
bisect_right相同。 - ?返回值?:無(wú)(直接修改原序列
a)。
?注意?:insort_right 和 insort 是同一個(gè)函數(shù),insort 是 insort_right 的別名。
使用場(chǎng)景總結(jié)
| 函數(shù) | 用途 | 是否插入元素 | 相同函數(shù)別名 |
|---|---|---|---|
| bisect_left | 查找 x 應(yīng)插入的最左位置 | 否 | - |
| bisect_right / bisect | 查找 x 應(yīng)插入的最右位置 | 否 | bisect |
| insort_left | 插入 x 到最左位置 | 是 | - |
| insort_right / insort | 插入 x 到最右位置 | 是 | insort |
示例代碼
import bisect # 已排序列表 a = [1, 3, 4, 4, 6, 8] # 查找插入位置 print(bisect.bisect_left(a, 4)) # 輸出: 2(第一個(gè) >=4 的位置) print(bisect.bisect_right(a, 4)) # 輸出: 4(第一個(gè) >4 的位置) # 插入元素 bisect.insort_left(a, 4) print(a) # 輸出: [1, 3, 4, 4, 4, 6, 8] bisect.insort_right(a, 4) print(a) # 輸出: [1, 3, 4, 4, 4, 4, 6, 8]
如果你需要更高效地在動(dòng)態(tài)數(shù)據(jù)中維護(hù)有序性(比如頻繁插入和查找),bisect 模塊是一個(gè)非常實(shí)用的工具,比每次都重新排序要高效得多。
到此這篇關(guān)于Python標(biāo)準(zhǔn)庫(kù)bisect模塊的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python bisect模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python3-flask-3將信息寫入日志的實(shí)操方法
在本篇文章里小編給大家整理的是關(guān)于python3-flask-3將信息寫入日志的實(shí)操方法,有興趣的朋友們學(xué)習(xí)下。2019-11-11
Python NumPy創(chuàng)建數(shù)組方法
這篇文章主要介紹了Python NumPy創(chuàng)建數(shù)組方法,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-09-09
python list.sort()根據(jù)多個(gè)關(guān)鍵字排序的方法實(shí)現(xiàn)
Python list內(nèi)置sort()方法用來(lái)排序,也可以用python內(nèi)置的全局sorted()方法來(lái)對(duì)可迭代的序列排序生成新的序列,本文詳細(xì)的介紹了python list.sort()根據(jù)多個(gè)關(guān)鍵字排序,感興趣的可以了解一下2021-12-12
Pytest執(zhí)行unittest TestSuite(測(cè)試套件)的實(shí)現(xiàn)方法
TestSuite一直是unittest的靈活與精髓之處,在繁多的測(cè)試用例中,可以任意挑選和組合各種用例集,這篇文章主要介紹了Pytest執(zhí)行unittest TestSuite(測(cè)試套件)的實(shí)現(xiàn)方法,需要的朋友可以參考下2021-08-08
分布式全文檢索引擎ElasticSearch原理及使用實(shí)例
這篇文章主要介紹了分布式全文檢索引擎ElasticSearch原理及使用實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
PyQt4 treewidget 選擇改變顏色,并設(shè)置可編輯的方法
今天小編就為大家分享一篇PyQt4 treewidget 選擇改變顏色,并設(shè)置可編輯的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
Python操作JSON文件的知識(shí)點(diǎn)整理
Python?提供了內(nèi)置的?json?模塊來(lái)處理?JSON?格式的文件。該模塊主要分為讀取和寫入?JSON?文件。本文主要為大家整理了一些Python操作JSON文件的知識(shí)點(diǎn),需要的可以參考一下2023-01-01

