翻譯自 這裡
Preface :
這個模組提供 basic bisection algorithm 來維護一個 Ordered list, 每次插入 element 後都不必重新 sorting 以減少 comparison 的 effort. 先來看看這個模組上提供的方法 :
- bisect.bisect_left(a, x, lo=0, hi=len(a))
- bisect.bisect_right(a, x, lo=0, hi=len(a))
- bisect.bisect(a, x, lo=0, hi=len(a))
- bisect.insort_left(a, x, lo=0, hi=len(a))
- bisect.insort_right(a, x, lo=0, hi=len(a))
- bisect.insort(a, x, lo=0, hi=len(a))
Searching Sorted Lists :
透過下面的函數包裝, 讓你輕鬆從 sorted list 進行搜尋 :
使用範例如下 :
Other Examples :
考慮我們要為成績分等 : 60 以下為 F ; 60~69為D ; 70~79為C ; 80~89為B ; 90~100為A. 透過模組 bisect 便可以很輕鬆辦到. 透過函數 bisect() 來對 [60, 70, 80, 90] 進行 indexing ; 可以知道小於 60 會得到 0 ; 60~69會得到1 ; 70~79會得到2 以此類推. 因此我們可以透過返回的 index 取出 'FDCBA' 對應位置的字元便可以達成 :
另外再使用函數 sorted() 與 bisect() 上的差別是 bisect() 並沒有所謂的 reverse 的功能且使用上是在參數已經是 ordered 條件下才有意義. 因此在使用上彼此是相輔相成, 來看看下面的範例 :
Preface :
這個模組提供 basic bisection algorithm 來維護一個 Ordered list, 每次插入 element 後都不必重新 sorting 以減少 comparison 的 effort. 先來看看這個模組上提供的方法 :
- bisect.bisect_left(a, x, lo=0, hi=len(a))
- bisect.bisect_right(a, x, lo=0, hi=len(a))
- bisect.bisect(a, x, lo=0, hi=len(a))
- bisect.insort_left(a, x, lo=0, hi=len(a))
- bisect.insort_right(a, x, lo=0, hi=len(a))
- bisect.insort(a, x, lo=0, hi=len(a))
Searching Sorted Lists :
透過下面的函數包裝, 讓你輕鬆從 sorted list 進行搜尋 :
- def index(a, x):
- 'Locate the leftmost value exactly equal to x'
- i = bisect_left(a, x)
- if i != len(a) and a[i] == x:
- return i
- raise ValueError
- def find_lt(a, x):
- 'Find rightmost value less than x'
- i = bisect_left(a, x)
- if i:
- return a[i-1]
- raise ValueError
- def find_le(a, x):
- 'Find rightmost value less than or equal to x'
- i = bisect_right(a, x)
- if i:
- return a[i-1]
- raise ValueError
- def find_gt(a, x):
- 'Find leftmost value greater than x'
- i = bisect_right(a, x)
- if i != len(a):
- return a[i]
- raise ValueError
- def find_ge(a, x):
- 'Find leftmost item greater than or equal to x'
- i = bisect_left(a, x)
- if i != len(a):
- return a[i]
- raise ValueError
Other Examples :
考慮我們要為成績分等 : 60 以下為 F ; 60~69為D ; 70~79為C ; 80~89為B ; 90~100為A. 透過模組 bisect 便可以很輕鬆辦到. 透過函數 bisect() 來對 [60, 70, 80, 90] 進行 indexing ; 可以知道小於 60 會得到 0 ; 60~69會得到1 ; 70~79會得到2 以此類推. 因此我們可以透過返回的 index 取出 'FDCBA' 對應位置的字元便可以達成 :
另外再使用函數 sorted() 與 bisect() 上的差別是 bisect() 並沒有所謂的 reverse 的功能且使用上是在參數已經是 ordered 條件下才有意義. 因此在使用上彼此是相輔相成, 來看看下面的範例 :
This message was edited 14 times. Last update was at 03/04/2012 09:24:08
沒有留言:
張貼留言