You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何实现数值区间映射?以AQI等级计算为例

AQI等级映射优化实现方案

方案1:使用内置bisect模块(推荐,易维护+高性能)

Python内置的bisect模块提供了二分查找能力,非常适合这种连续区间映射的场景,不需要写冗余的多分支判断,后续调整阈值也只需要修改分界点列表即可:

import bisect

def get_level_of_aqi(aqi):
    # 校验AQI合法性
    if aqi < 0:
        raise ValueError("AQI数值不能为负数")
    # AQI区间的上界阈值,按升序排列
    breakpoints = [50, 100, 150, 200, 300]
    # 二分查找得到的插入位置+1直接对应等级
    return bisect.bisect_left(breakpoints, aqi) + 1

优势:

  • 代码简洁,没有重复的判断逻辑
  • 时间复杂度为O(log n),哪怕后续区间数量大幅增加也不会出现性能下降
  • 维护成本低,调整区间阈值只需要修改breakpoints列表,不需要改动逻辑代码
  • 完全匹配规则要求:输入100时返回值为2,所有区间映射都符合定义

方案2:区间元组遍历(无依赖,逻辑直观)

如果不想引入额外模块,也可以预定义区间与等级的映射列表,遍历匹配即可,区间数量少的情况下性能差异可以忽略:

def get_level_of_aqi(aqi):
    if aqi < 0:
        raise ValueError("AQI数值不能为负数")
    # 按顺序存储(区间上界, 对应等级),最后用无穷大匹配超过300的情况
    level_map = [(50, 1), (100, 2), (150, 3), (200, 4), (300, 5), (float('inf'), 6)]
    for upper_bound, level in level_map:
        if aqi <= upper_bound:
            return level

优势:

  • 不需要导入任何依赖,逻辑直白易懂
  • 区间与等级的对应关系直接体现在level_map中,可读性极强

内容的提问来源于stack exchange,提问作者Andy Su

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:24:03