假設(shè)公司有多個產(chǎn)品線,每個產(chǎn)品線的訂單號位數(shù)不一樣(已知產(chǎn)品A有10-12位岭洲,產(chǎn)品B有13-16位宛逗,產(chǎn)品C有17-20位)。
現(xiàn)在需要做一個統(tǒng)一的平臺钦椭,訂單查詢統(tǒng)一使用這個平臺拧额。
現(xiàn)在有一個訂單查詢接口,獲取訂單號并且根據(jù)訂單號需返回不同的產(chǎn)品名稱彪腔。
最簡單的莫過于
if 10 < len(order_no) <= 12:
? ? app_name = A
elif?10 < len(order_no) <=?16:
? ? app_name = B
elif?10 < len(order_no) <=?20:
? ? ?app_name = C
eles:
? ?app_name = None
這樣能實(shí)現(xiàn)侥锦,但是有點(diǎn)呆呆的。
這時候德挣,我們就可以考慮一下bisect
import bisect
def get_app_name(order_no, len_order_no=[10, 13, 17, 21], name=[None,'A', 'B', 'C', None]):
? ? i = bisect.bisect(len_order_no, len(order_no))
? ? return name[i]
bisect.bisect會識別第二個元素(數(shù)字)在第一個元素(可迭代對象恭垦,內(nèi)置每個元素為數(shù)字)中所在的區(qū)間,并且返回對應(yīng)下標(biāo)
通過這個下標(biāo)就可以做列表取值操作
bisect可以計算區(qū)間格嗅,自然也可以排序添加數(shù)據(jù)番挺。
這樣就免得使用列表添加并排序的方法
以上