Python如何查找列表中的连续缺失数字并按连续段分组
连续缺失数字分组实现方案
你现有代码已经正确提取出了所有平铺的缺失数字,只需要在现有逻辑基础上增加连续数字分组的步骤即可,不需要改动原有查找缺失值的核心逻辑。
实现思路
- 第一步沿用原有逻辑,先拿到所有缺失数字的平铺列表
- 对平铺的缺失数字列表做连续分组:
- 空列表直接返回空结果
- 取第一个缺失值作为第一个分组的初始元素
- 遍历后续每个缺失值,如果当前值和前一个值差值为1,说明是连续数字,加入当前分组;否则新建分组存入当前值
- 遍历结束后把最后一个未存入结果的分组追加进去
完整实现代码
get_user_input_list = [1,2,3,4,5,7,8,11,12,13,14,15,17,21] missing_item_in_list = [] start = get_user_input_list[0] stop = get_user_input_list[-1] # 原有查找缺失值逻辑保留 for i in range(start,stop+1): if i not in get_user_input_list: missing_item_in_list.append(i) # 新增连续分组逻辑 grouped_missing = [] if missing_item_in_list: # 初始化第一个分组 current_group = [missing_item_in_list[0]] for num in missing_item_in_list[1:]: if num - current_group[-1] == 1: # 和当前组最后一个元素连续,追加到当前组 current_group.append(num) else: # 不连续,保存当前组,新建分组 grouped_missing.append(current_group) current_group = [num] # 把最后一个分组加入结果 grouped_missing.append(current_group) print(grouped_missing)
运行结果
执行上述代码会输出符合预期的结果:
[[6], [9, 10], [16], [18, 19, 20]]
效率优化提示:如果输入列表长度很大,
i not in get_user_input_list的列表查找时间复杂度是O(n),可以先把原列表转成集合num_set = set(get_user_input_list),再用i not in num_set做判断,能把查找效率提升到O(1),大幅降低大列表下的运行耗时。
内容的提问来源于stack exchange,提问作者Maya
相关产品推荐
相关产品推荐

