首頁 > 後端開發 > Python教學 > bisect數組的二分演算法

bisect數組的二分演算法

高洛峰
發布: 2016-12-14 15:51:55
原創
1137 人瀏覽過

本模組實作已經排序的佇列清單插入元素之後保持排序。對於個大量資料的列表來看,插入元素並保持排序,計算量是非常大的。本模組實現了bisect演算法,主要基於二分演算法來實現。

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

對有序列表a裡插入元素x,保持有序不變,返回插入的位置。參數lo和hi是表示判斷清單的範圍,預設是整個範圍。如果插入的元素x已經在列表a存在,那就插入在存在元素的左邊。

範例:

#Python 3.4

import bisect

 

l = [8, 5, 6,print6, ect.bisect_left (l, 0))

print(l)

print(bisect.bisect_left(l, 5))

print(bisect.bisect_left(l, 7))

結果輸出如下:

5555 , 6, 6, 8]

0

[3, 5, 6, 6, 8]

1

4

)

4

)) 

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

在有序隊列a裡尋找x可以插入的位置,並保持隊列有序。如果插入的值與佇列裡的值相同,則插入在相同元素的右邊,把這個位置的索引值傳回。

範例:

#python 3.4

import bisect

 

l = [8, 5, 6,16, 3] ect.bisect_right (l, 0))

print(l)

print(bisect.bisect(l, 5))

print(bisect.bisect(l, 7))

結果輸出如下:

[3,555 , 6, 6, 8]

0

[3, 5, 6, 6, 8]

2

4

)= )) 

插入一個元素x到隊列a,並把把隊列排序。當於:a.insert(bisect.bisect_left(a, x, lo, hi), x)。

範例:

#python 3.4

import bisect

 

l = [8, 5, 6,m6, 3] insort_left(l , 0)

print(l)

bisect.insort_left(l, 5)

print(l)

bisect.insort_left(l, 7)

bisect.insort_left(l, 7)

3, 5, 6, 6, 8]

[0, 3, 5, 6, 6, 8]

[0, 3, 5, 5, 6,50, , 5, 6, 6, 7, 8]

 

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

bisect.. len(a)) 

插入元素x到a隊列裡,如果發現有相同元素,就插入到相同元素的右邊。

範例:

#python 3.4

import bisect

 

l = [8, 5, 6,m6, 3] insort_right(l , 0)

print(l)

bisect.insort(l, 5)

print(l)

bisect.insort(l, 7)

print(l)

bisect.insort(l, 7)

(l)

3, 5, 6, 6, 8]

[0, 3, 5, 6, 6, 8]

[0, 3, 5, 5, 6,50,是

    i = bisect_left(a, x)

    if i != len(a) and a[i] == x:

    

def find_lt(a, x):

    'Find rightmost value less than x'

    i = bisect_left(a, x)

    if i: raise ValueError

 

def find_le(a, x):

    'Find rightmost value less than or equal to x'

    i = bisect_right(a, x)

  

    raise ValueError

 

def find_gt(a, x):

    'Find leftmost value greater than x'

    i = bisect_right(a, x)

  

        return a[i]

    raise ValueError

 

def  or equal to x'

    i = bisect_left(a, x)

    if i ! = len(a):

        return a[i]

    raise ValueError

 

.355使用對學生成績為學生成績轉換為基礎ect

 

def grade(score, breakpoints =[60, 70, 80, 90], grades='FDCBA'):

     i = bisect.bisect(breakpoints, score)

🜠  bisect.bisect(breakpoints, score)

  bisect.bisect(breakpoints, 7, 70, 89, 90, 100])

print([grade(score) for score in [33, 99, 77, 70, 89, 90, 100]])) , 70, 89, 90, 100]

['F', 'A', 'C', 'C', 'B', 'A', 'A']

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板