Python:从间隔映射到值

Ago*_*gos 14 python range intervals

我正在重构一个函数,给定一系列隐式定义区间的端点,检查区间中是否包含一个数字,然后返回一个对应的(以任何可计算的方式不相关).现在处理工作的代码是:

if p <= 100:
    return 0
elif p > 100 and p <= 300:
    return 1
elif p > 300 and p <= 500:
    return 2
elif p > 500 and p <= 800:
    return 3
elif p > 800 and p <= 1000:
    return 4
elif p > 1000:
    return 5
Run Code Online (Sandbox Code Playgroud)

这是IMO非常可怕,缺乏间隔和返回值都是硬编码的.当然可以使用任何数据结构.

Gle*_*ard 41

import bisect
bisect.bisect_left([100,300,500,800,1000], p)
Run Code Online (Sandbox Code Playgroud)

这里的文档:bisect

  • 确实令人印象深刻。超级干净,我相信也很快。如果确实需要非自然排序或其他东西作为回报,它也可以轻松扩展,例如字符串: import bisect n = bisect.bisect_left([100,300,500,800,1000], p) a=["absent","低”、“平均”、“高”、“非常高”、“极端”] a[n] (3认同)