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可以计算区间,自然也可以排序添加数据。


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

以上

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。