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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:24:16