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

如何在Python中定义特定范围,判断三值是否同属同一大区间与子区间

需求与优化需求

我需要写一个函数,判断三个数值是否属于同一大区间下的特定子区间,如果三个值都在同一个大区间和子区间里,就打印指定信息。

  • 用last3_values变量从DataFrame中获取最近三个历史数值(会实时更新),比如last3_values为200、277、236时,它们都属于百位大区间下的200-299子区间,数值具有相似性。
  • 大区间包括百位(100’s)、千位(1000’s)、万位(10000’s)等,对应的子区间如200-299、9000-9999、15000-15999这类。

我借助ChatGPT生成了一个函数,但觉得逻辑繁琐,希望得到更简洁的实现方案。原函数如下:

def get_specific_range(delta_values):
    abs_delta = abs(delta_values)
    str_delta = str(abs_delta)
    length = len(str_delta)

    # For values in the 10's
    if length == 1 or (length == 2 and abs_delta < 100):
        return 0, 99  # The range for 0-99

    # For values in the hundreds
    elif length == 3:
        prefix = int(str_delta[0])  # Get the hundred's digit
        return prefix * 100, (prefix + 1) * 100 - 1

    # For values in the thousands
    elif length == 4:
        prefix = int(str_delta[:2])  # Get the first two digits
        return prefix * 1000, (prefix + 1) * 1000 - 1

    # For values in the ten thousands
    elif length == 5:
        prefix = int(str_delta[:3])  # Get the first three digits
        return prefix * 10000, (prefix + 1) * 10000 - 1

    else:
        return None
简洁版实现方案

可以通过数学计算替代字符串操作,让逻辑更通用,同时减少分支判断:

def get_specific_range(value):
    abs_val = abs(value)
    if abs_val < 100:
        return (0, 99)
    # 计算区间基数(100、1000、10000...)
    base = 10 ** (len(str(abs_val)) - 2) * 10
    # 计算区间起始值
    start = (abs_val // base) * base
    # 计算区间结束值
    end = start + base - 1
    return (start, end)

优化说明

  • 统一逻辑:不再针对不同位数写单独分支,通过数学计算自动适配百位、千位、万位等所有大区间场景
  • 简化操作:仅在计算基数时用一次字符串长度,其余用整数运算完成,效率更高
  • 扩展性强:无论数值是十万位还是更高位数,函数都能自动生成对应子区间,无需新增分支
  • 逻辑清晰:0-99的情况单独处理,其余情况统一计算

使用示例

# 测试不同数值
print(get_specific_range(277))  # 输出(200, 299)
print(get_specific_range(9500)) # 输出(9000, 9999)
print(get_specific_range(15600))# 输出(15000, 15999)
print(get_specific_range(50))    # 输出(0, 99)

验证三个值是否同区间的逻辑

基于上面的函数,可封装一个验证函数:

def check_same_range(values):
    if len(values) != 3:
        return False
    ranges = [get_specific_range(v) for v in values]
    # 判断三个值的区间是否完全一致
    if all(r == ranges[0] for r in ranges):
        start, end = ranges[0]
        print(f"三个数值均属于子区间{start}-{end}")
        return True
    return False

# 测试
last3_values = [200, 277, 236]
check_same_range(last3_values)  # 输出:三个数值均属于子区间200-299

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 05:22:30