學習《流暢的Python學習》 筆記03

2021-09-29 05:22:32 字數 1903 閱讀 1792

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...