Python列表按连续元素差值小于35规则分组的实现方法求助
实现代码
你可以先封装一个单列表的分组工具函数,再遍历字典所有值执行分组逻辑即可,完整可运行代码如下:
def group_y_list(raw_list, threshold=35): if not raw_list: return [] # 初始化结果,第一个元素先放入第一个分组 result = [[raw_list[0]]] for num in raw_list[1:]: # 取当前最后一个分组的最后一个元素做差值对比 last_num = result[-1][-1] if abs(num - last_num) < threshold: result[-1].append(num) else: result.append([num]) return result # 示例输入数据 data = {0: [177, 188, 201, 209, 226, 233, 250, 258, 273, 282, 299, 307, 323, 330, 347, 355, 370, 379, 395, 403, 420, 428, 444, 452, 468, 476, 492, 500, 517, 524, 541, 549, 565, 573, 589, 597, 613, 621, 637, 651, 753, 761, 776], 1: [477, 489, 490]} # 对字典每个值执行分组 processed_data = {k: group_y_list(v) for k, v in data.items()} # 输出验证 print(processed_data)
输出结果
运行后输出和要求的格式完全一致:
{0: [[177, 188, 201, 209, 226, 233, 250, 258, 273, 282, 299, 307, 323, 330, 347, 355, 370, 379, 395, 403, 420, 428, 444, 452, 468, 476, 492, 500, 517, 524, 541, 549, 565, 573, 589, 597, 613, 621, 637, 651], [753, 761, 776]], 1: [[477, 489, 490]]}
补充说明
- 阈值
threshold默认设为35,可根据实际业务需求灵活调整 - 代码中加了绝对值判断,即使y坐标列表不是升序排列也能正常运行,如果你确定输入都是升序,可以去掉
abs()提升少量性能
内容的提问来源于stack exchange,提问作者Taarun Srinivas
相关产品推荐
相关产品推荐

