假设公司有多个产品线,每个产品线的订单号位数不一样(已知产品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可以计算区间,自然也可以排序添加数据。
这样就免得使用列表添加并排序的方法
以上