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

如何根据阈值分割列表?子列表极值差固定为9的自动分割方案

自动按差值阈值分割列表的实现方案

嘿,这个需求很清晰!咱们可以用一个简单的迭代逻辑来实现,核心就是动态跟踪当前子列表的最小/最大值,只要新元素加入后会导致子列表的最大值与最小值之差超过9,就自动新建一个子列表,完全不用手动指定分割数值。

实现代码(Python)

下面是一个健壮性不错的函数,不管你的列表是递增还是无序,都能正确处理:

def split_list_by_threshold(lst, threshold=9):
    if not lst:
        return []
    result = []
    # 初始化第一个子列表及其最小、最大值
    current_sublist = [lst[0]]
    current_min = lst[0]
    current_max = lst[0]
    
    for num in lst[1:]:
        # 计算加入当前元素后的新极值
        new_min = min(current_min, num)
        new_max = max(current_max, num)
        
        if new_max - new_min <= threshold:
            # 差值符合要求,加入当前子列表并更新极值
            current_sublist.append(num)
            current_min = new_min
            current_max = new_max
        else:
            # 差值超过阈值,保存当前子列表并新建子列表
            result.append(current_sublist)
            current_sublist = [num]
            current_min = num
            current_max = num
    # 别忘了把最后一个子列表加入结果
    result.append(current_sublist)
    return result

逻辑解释

这个函数的思路非常直观:

  • 先处理空列表的边界情况,避免运行报错
  • 从列表第一个元素开始,初始化第一个子列表,并记录它的最小和最大值
  • 逐个遍历后续元素:
    • 先预判加入当前元素后,子列表的新极值差是否符合要求
    • 如果符合,就把元素加入当前子列表,更新极值
    • 如果不符合,就把当前子列表存入结果集,然后以当前元素为起点新建子列表
  • 遍历结束后,把最后一个未保存的子列表加入结果

测试你的示例列表

把你的列表传入这个函数,得到的结果如下:

your_list = [66.8344897031784, 68.30329954624176, 78.08724462985992, 107.26053655147552, 107.44138896465302, 109.66499030590057, 171.51213765144348, 172.01367378234863, 173.17001342773438, 343.152220249176, 343.6864709854126, 346.3593053817749, 366.87140941619873, 372.18000888824463, 376.73717975616455, 431.0921788215637, 431.4517140388489, 431.8779182434082, 500.0079822540283, 500.45250415802, 503.12490463256836]
print(split_list_by_threshold(your_list))

输出结果:

[
 [66.8344897031784, 68.30329954624176],
 [78.08724462985992],
 [107.26053655147552, 107.44138896465302, 109.66499030590057],
 [171.51213765144348, 172.01367378234863, 173.17001342773438],
 [343.152220249176, 343.6864709854126, 346.3593053817749],
 [366.87140941619873, 372.18000888824463],
 [376.73717975616455],
 [431.0921788215637, 431.4517140388489, 431.8779182434082],
 [500.0079822540283, 500.45250415802, 503.12490463256836]
]

完全符合你的预期:第一个子列表到68.3就停止,因为下一个元素78.0和66.8的差超过了9,自动新建子列表;后续的每个子列表都严格满足最大值与最小值之差≤9的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 07:37:40