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

Python中如何判断数值是否属于枚举定义的slice对象对应区间?

解决方案

Python 原生的slice对象仅作为切片参数的存储结构体,没有实现__contains__逻辑,因此直接用age in slice(...)无法得到预期结果。

最符合Python风格的实现是借助内置range类型完成判断:range与slice的参数规则完全兼容,且自带O(1)复杂度的成员判断实现,不需要自己手写边界校验逻辑,同时天然支持step参数。

代码实现

首先写一个通用的in_slice判断工具:

def in_slice(num: int, s: slice) -> bool:
    start = s.start or 0
    stop = s.stop
    step = s.step or 1

    # 处理无上限的区间场景
    if stop is None:
        return num >= start and (num - start) % step == 0
    return num in range(start, stop, step)

之后改造匹配函数即可:

def get_category(age: int) -> AgeCategory:
    for age_range in AgeCategory:
        if in_slice(age, age_range.value):
            return age_range
    assert False, "unreachable"

额外优化提示

如果你的AgeCategory枚举项是按年龄从小到大有序定义的,也可以用bisect模块预存所有区间边界,将查找复杂度从O(n)降到O(logn),枚举项不多的场景下遍历的性能已经完全够用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:06:04