Python如何实现列表按相邻差值<3且元素数≥7分组求区间索引
实现方法
你的现有代码直接过滤了不符合要求的差值,丢失了原始索引信息,因此无法定位区间的起止位置。你可以按以下逻辑实现:
首先遍历差值数组,记录连续符合差值<3.0的区间,再筛选出区间内元素数量>=7的结果即可:
values = [73.0, 143.0, 323.0, 324.0, 325.0, 325.0, 325.0, 325.0, 325.5, 325.5, 326.0, 326.0, 326.0, 326.0, 406.0, 406.5, 432.5, 433.0, 433.5, 434.5, 435.0, 435.0, 436.0, 436.5, 437.5, 438.0] diff_ar = [70.0, 180.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 80.0, 0.5, 26.0, 0.5, 0.5, 1.0, 0.5, 0.0, 1.0, 0.5, 1.0, 0.5] result = [] current_start = 0 for i in range(len(diff_ar)): if diff_ar[i] >= 3.0: # 计算当前连续区间的元素总数 element_count = i - current_start + 1 if element_count >=7: result.append((current_start, i)) # 重置下一个区间的起始位置 current_start = i + 1 # 遍历结束后检查最后一段连续区间是否符合要求 element_count = len(values) - current_start if element_count >=7: result.append((current_start, len(values)-1)) print(result)
运行后输出结果和你期望的一致:
[(2, 12), (16, 24)]
逻辑说明
- 差值数组的索引
i对应values[i]和values[i+1]的差值,因此连续k个符合要求的差值对应的values区间为[current_start, i],元素总数为i - current_start + 1 - 遇到差值>=3.0时即代表当前连续区间中断,此时判断长度是否符合要求,符合则加入结果
- 遍历结束后需要额外判断最后一段连续区间,避免漏掉末尾符合要求的分组
内容的提问来源于stack exchange,提问作者KG_123
相关产品推荐
相关产品推荐

