bisect排序

假设公司有多个产品线,每个产品线的订单号位数不一样(已知产品A有10-12位,产品B有13-16位,产品C有17-20位)。

现在需要做一个统一的平台,订单查询统一使用这个平台。

现在有一个订单查询接口,获取订单号并且根据订单号需返回不同的产品名称。

最简单的莫过于

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

这样能实现,但是有点呆呆的。

这时候,我们就可以考虑一下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会识别第二个元素(数字)在第一个元素(可迭代对象,内置每个元素为数字)中所在的区间,并且返回对应下标

通过这个下标就可以做列表取值操作

bisect可以计算区间,自然也可以排序添加数据。


这样就免得使用列表添加并排序的方法

以上

你可能感兴趣的:(bisect排序)