Python bisect 模組 (測試版本Python3.6,測試環境Anaconda,參考文獻English:3.7.1rc1)

.faith發表於2018-09-30

對於已排序的List資料使用該模組提供的正確方法進行操作之後可以不需要再次排序,節約程式碼執行成本和時間

對於普通序列來説該方法便過於複雜和不適用

如下舉例和函式説明只是以排序好的List舉例

演算法核心:二分法,詳情參考原始碼

PS:本人小白,剛開始自學,先重在使用,再由淺入深,其中有現階段未領悟到的和筆誤,望前輩指出修正 :)

        轉載也請註明出處哦~


建立list 

>>>import bisect

>>>listTest = [1, 1, 2, 3, 4, 4, 6, 6, 7, 7, 8, 9, 9]

功能函式原型:

1) bisect.bisect_left(a, x, lo = 0, hi = len(a))

    函式輸入:

    a: 需要被進行搜尋操作的list,在本例中即listTest

    x :想要搜尋的值,即list中存放的那些值,也可以是不在list中的值

    lo&hi:lo代表搜尋的起始位置,hi表示搜尋的長度,這兩個引數限制了在List中的搜尋區域,預設不輸入參數列示從List頭部開                                 始,長度為整個List(即表示搜尋整個List)

    函式功能:

    返回在lo&hi限定區域中,第一個x在a中的位置(假設x存在在a中,不存在的情況可以自己嘗試)

    輸入和輸出程式碼:

>>>bisect.bisect_right(listTest, 4)
>>>4
>>>

 

2) bisect.bisect_right(a, x, lo = 0, hi = len(a)) / bisect.bisect(a, x, lo = 0, hi = len(a))

    函式輸入:

    a: 需要被進行搜尋操作的list,在本例中即listTest

    x :想要搜尋的值,即list中存放的那些值,也可以是不在list中的值

    lo&hi:lo代表搜尋的起始位置,hi表示搜尋的長度,這兩個引數限制了在List中的搜尋區域,預設不輸入參數列示從List頭部開                                 始,長度為整個List(即表示搜尋整個List)

    函式功能:

    返回在lo&hi限定區域中,最後一個x在a中的位置的後面一個位置(假設x存在在a中,不存在的情況可以自己嘗試)

    輸入和輸出程式碼:

>>>bisect.bisect_right(listTest, 4)
>>>6
>>>
>>>bisect.bisect(listTest, 4)
>>>6
>>>

 

3) bisect.insort_left(a, x, lo = 0, hi = len(a))

    函式輸入:

    a: 需要被進行插入操作的list,在本例中即listTest

    x :需要被插入list的值

    lo&hi:lo代表插入起始位置,hi表示長度,這兩個引數限制了在List中的插入區域,預設不輸入參數列示從List頭部開                                               始,長度為整個List(即表示搜尋整個List)

    函式功能:

    沒有返回值,在lo&hi限定區域中,將x插入a中使用bisect.bisect_left(a, x, lo = 0, hi = len(a))函式查詢出的位置

    輸入和輸出程式碼:

>>>bisect.insort_left(listTest, 4)
>>>print (listTest)
>>>[1, 1, 2, 3, 4, 4, 4, 6, 6, 7, 7, 8, 9, 9]

 

4) bisect.insort_right(a, x, lo = 0, hi = len(a)) / bisect.insort(a, x, lo = 0, hi = len(a))

    函式輸入:

    a: 需要被進行插入操作的list,在本例中即listTest

    x :需要被插入list的值

    lo&hi:lo代表插入起始位置,hi表示長度,這兩個引數限制了在List中的插入區域,預設不輸入參數列示從List頭部開                                               始,長度為整個List(即表示搜尋整個List)

    函式功能:

    沒有返回值,在lo&hi限定區域中,將x插入a中使用bisect.bisect_right(a, x, lo = 0, hi = len(a)) / bisect.bisect(a, x, lo = 0, hi = len(a))函式     查詢出的位置

    輸入和輸出程式碼:

>>>bisect.insort_right(listTest, 7)
>>>print (listTest)
>>>[1, 1, 2, 3, 4, 4, 4, 6, 6, 7, 7, 7, 8, 9, 9]
>>>
>>>bisect.insort_right(listTest, 8)
>>>print (listTest)
>>>[1, 1, 2, 3, 4, 4, 4, 6, 6, 7, 7, 7, 8, 8, 9, 9]
>>>
>>>bisect.insort_right(listTest, 5)
>>>print (listTest)
>>>[1, 1, 2, 3, 4, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 9, 9]

 

 

 

 

相關文章