2.8.1 用bisect來搜尋
import bisect
import sys
haystack =[1
,4,5
,6,8
,12,15
,20,21
,23,23
,26,29
,30]needles =[0
,1,2
,5,8
,10,22
,23,29
,30,31
]row_fmt =
' @ '
defdemo
(bisect_fn)
:for needle in
reversed
(needles)
:# 使用 bisect_fn 方法排序,此處為 bisect_right,
# 在 haystack中查詢 needle,needle 存在時返回 needle左側的位置,
# needle不存在返回應該插入的位置,此處為不存在
position = bisect_fn(haystack, needle)
#生成offset個' |'
offset = position *
' |'
print
(row_fmt.
format
(needle, position, offset)
)if __name__ ==
'__main__'
:if sys.ar**[-1
]=='left'
: bisect_fn = bisect.bisect_left
else
: bisect_fn = bisect.bisect
print
('demo:'
, bisect_fn.__name__)
print
('haystack ->'
,' '
.join(
'%2d'
% n for n in haystack)
) demo(bisect_fn)
結果如下:
demo: bisect_right
haystack -
>14
56812
1520
2123
2326
2930
31 @ 14||
||||
||||
||||
3130 @ 14||
||||
||||
||||
3029 @ 13||
||||
||||
|||29
23 @ 11||
||||
||||
|2322 @ 9||
||||
|||22
10 @ 5||
|||10
8 @ 5||
|||8
5 @ 3||
|52 @ 1|2
1 @ 1|1
0 @ 0
0
讀懂此節**。
其次,bisect 函式其實是 bisect_right 函式的別名,後者還有個姊 妹函式叫 bisect_left。它們的區別在於,bisect_left 返回的插入 位置是原序列中跟被插入元素相等的元素的位置,也就是新元素會被放 置於它相等的元素的前面,而 bisect_right 返回的則是跟它相等的元 素之後的位置。這個細微的差別可能對於整數序列來講沒什麼用,但是 對於那些值相等但是形式不同的資料型別來講,結果就不一樣了
學習《流暢的Python學習》 筆記02
1.2.2 字串表示形式 python 有乙個內建的函式叫 repr,它能把乙個物件用字串的形式表 達出來以便辨認,這就是 字串表示形式 repr 就是通過repr這個特殊方法來得到乙個物件的字串表示形式的。如果沒有實現repr,當我們在控制台裡列印乙個向量的例項時,得到的字串 可能會是 互動式控制...
《流暢的python》學習筆記(三)
字典是python的基石 除dict外,有其他好用的如defaultdict orderedict chainmap counter 屬於collections模組 字典提供了多種構造方法,比如 a dict one 1,two 2,three 3 b c dict zip one two thre...
流暢的python學習1
usr bin env python3 coding utf 8 created on mon apr 20 21 08 08 2020 author root import collections card collections.namedtuple card rank suit class f...