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

