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

Python中基于上下限生成周期子列表列表的实现需求

列表切片:按「低于下限→超过上限」的周期提取首尾元素

问题描述

给定列表:

l = [136.29, 136.67, 136.67, 136.68, 136.38, 136.41, 136.41, 136.43, 136.0, 136.09, 136.1, 136.23, 135.71, 135.9, 135.9, 136.02, 135.73, 135.81, 135.82, 136.19, 135.66, 136.15, 136.16, 136.62, 136.64, 136.66, 135.97, 136.52, 136.52, 136.63, 136.08, 136.48]

设置下限lower = 136.3、上限upper = 136.6,需要按以下规则切片:

  • 一个周期从首次低于下限的元素开始,到首次超过上限的元素结束,仅保留该周期的首尾元素
  • 下一个周期从再次出现低于下限的元素开始,重复上述逻辑
  • 期望输出:
output = [[136.29, 136.67], [136.0, 136.62], [135.97, 136.63]]

解决方案

通过状态机的方式跟踪周期的起始和结束状态,实现精准提取:

l = [136.29, 136.67, 136.67, 136.68, 136.38, 136.41, 136.41, 136.43, 136.0, 136.09, 136.1, 136.23, 135.71, 135.9, 135.9, 136.02, 135.73, 135.81, 135.82, 136.19, 135.66, 136.15, 136.16, 136.62, 136.64, 136.66, 135.97, 136.52, 136.52, 136.63, 136.08, 136.48]
lower = 136.3
upper = 136.6

output = []
state = "looking_start"  # 两种状态:寻找周期起点/寻找周期终点
current_start = None

for num in l:
    if state == "looking_start":
        # 找到低于下限的元素,标记为周期起点,切换状态
        if num < lower:
            current_start = num
            state = "looking_end"
    elif state == "looking_end":
        # 找到超过上限的元素,记录首尾对,回到寻找起点状态
        if num > upper:
            output.append([current_start, num])
            state = "looking_start"
            current_start = None

print(output)

逻辑说明

  1. 初始状态为looking_start,遍历列表寻找第一个低于下限的元素,作为周期起点
  2. 切换到looking_end状态后,继续遍历寻找第一个超过上限的元素,作为周期终点
  3. 将首尾元素组成的子列表加入结果,然后回到寻找下一个周期起点的状态
  4. 遍历结束后即可得到符合要求的输出结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:40:23