Python实现提取列表内所有5位数值区间分组及代码排错
问题排查
错误原因
- 原代码仅将输入列表中存在的数值作为长度为5的区间左端点遍历,漏掉了左端点不存在于输入列表、但区间内包含输入元素的情况,比如区间左端点为3、4、5、6时的分组都被遗漏,导致最终结果缺失了
[7]、[7,8]、[7,8,9]、[7,8,9,10]这几项。
正确实现代码
table = [1,7,8,9,10,11,19] # 转集合加速存在性查询 card_set = set(table) result = [] # 遍历所有可能的区间左端点,范围覆盖输入的最小值到最大值 for start in range(min(table), max(table)+1): # 长度为5的闭区间范围是[start, start+4] current_group = sorted([num for num in card_set if start <= num <= start+4]) # 仅保留非空分组 if current_group: result.append(current_group) print(result)
运行输出
[[1], [7], [7, 8], [7, 8, 9], [7, 8, 9, 10], [7, 8, 9, 10, 11], [8, 9, 10, 11], [9, 10, 11], [10, 11], [11], [19]]
内容的提问来源于stack exchange,提问作者CompleteNewb
相关产品推荐
相关产品推荐

