作用:維護有序列表,而不必再每次向列表,而不必在每次向列表增加乙個元素是都呼叫sort排序。
bisect模組實現了乙個演算法用於向列表中插入元素,同時仍保持列表有序。有些情況下,這筆反覆對乙個列表排序更高效,另外也比構建乙個大列表之後再顯示對其排序更為高效。
1.有序插入
import bisectimport random
random.seed(1)
print('new pos contents')
print('--- --- --------')
a = [1,4,6,8,12,15,20]
position = bisect.bisect(a,13)
print(position)
# 用可變序列內建的insert方法插入
a.insert(position,13)
print(a)
a = [1,4,6,8,12,15,20]
bisect.insort(a,13)
print(a)
2.處理重複
之前顯示的結果包括乙個重複的值77,bisect模組提供了兩種方法來處理重複。新值可以插入到現在值的左邊或右邊。insort()函式實際是insort_right()的別名,這個函式會在現有值之後插入新值。相應的函式insort——left()則在現有值之前插入新值。
l =for i in range(1,15):
r = random.randint(1, 100)
position = bisect.bisect_left(l,r)
bisect.insort_right(l,r)
print('%3d %3d' %(r,position),l)
使用bisect_left()和insort_left()處理同樣的資料是,結果會得到相同的有序列表,不過重複值插入的位置有所不同。
new pos contents--- --- --------
41 0 [41]
3 0 [3, 41]
44 2 [3, 41, 44]
19 1 [3, 19, 41, 44]
32 2 [3, 19, 32, 41, 44]
16 1 [3, 16, 19, 32, 41, 44]
27 3 [3, 16, 19, 27, 32, 41, 44]
22 3 [3, 16, 19, 22, 27, 32, 41, 44]
84 8 [3, 16, 19, 22, 27, 32, 41, 44, 84]
37 6 [3, 16, 19, 22, 27, 32, 37, 41, 44, 84]
46 9 [3, 16, 19, 22, 27, 32, 37, 41, 44, 46, 84]
7 1 [3, 7, 16, 19, 22, 27, 32, 37, 41, 44, 46, 84]
84 11 [3, 7, 16, 19, 22, 27, 32, 37, 41, 44, 46, 84, 84]
78 11 [3, 7, 16, 19, 22, 27, 32, 37, 41, 44, 46, 78, 84, 84]
Python標準庫 bisect 維護有序列表
python標準庫 bisect 維護有序列表 作用 維護有序列表,而不必在每次向列表增加乙個元素時都呼叫 sort 排序。python版本 1.4 及以後版本。bisect 模組實現了乙個演算法用於向列表中插入元素,同時仍保持列表有序。有些情況下,這比反覆對乙個列表排序更高效,另外也比構建乙個大列...
有序列表 無序列表 巢狀列表
無序列表 有序列表 coffee teamilk coffee teamilk 不同型別的有序列表 編號列表 bananas lemons oranges 大寫字母列表 bananas lemons oranges 小寫字母列表 bananas lemons oranges 羅馬數字列表 banan...
Python3 bisect是維護已排序序列神器
import bisect b 2,3,4,5 bisect.insort left b,2.0 bisect.insort right b,3.0 print bisect.bisect left b,2 print bisect.bisect right b,2 print b 列印結果 0 2...