Python检查列表是否含连续整数及统计缺失整数个数
统计整数列表相邻分段间的缺失整数个数
先看这个示例列表:
l = [1, 2, 3, 4, 10, 11, 12]
它显然不是连续的整数序列,我们可以用这段代码快速判断:
print(sorted(l) == list(range(min(l), max(l)+1))) # 输出: False
输出为False,因为序列里缺少了5、6、7、8、9这几个整数。
现在要扩展这个功能:在列表无重复元素的前提下,统计每段连续整数之间缺失的整数个数。比如:
l = [1, 2, 3, 4, 10, 11, 12, 14]
对应的输出应该是[5, 1]——4和10之间缺了5个整数,12和14之间缺了1个整数。
实现代码
def count_missing_integers(l): # 先对列表排序,处理无序输入的情况 sorted_list = sorted(l) missing_counts = [] # 遍历相邻元素对 for idx in range(1, len(sorted_list)): prev_num = sorted_list[idx-1] curr_num = sorted_list[idx] # 计算缺失个数:当前数 - 前一个数 - 1 missing = curr_num - prev_num - 1 if missing > 0: missing_counts.append(missing) return missing_counts # 测试示例 test_list1 = [1, 2, 3, 4, 10, 11, 12] print(count_missing_integers(test_list1)) # 输出: [5] test_list2 = [1, 2, 3, 4, 10, 11, 12, 14] print(count_missing_integers(test_list2)) # 输出: [5, 1]
代码说明
- 先对输入列表排序,确保我们能按顺序检查相邻的整数段
- 遍历排序后的列表,计算每对相邻元素的差值,减1就是两段之间缺失的整数个数(比如10-4-1=5,对应5到9这5个缺失数)
- 只收集大于0的缺失个数,过滤掉连续元素的情况(比如相邻元素是11和12,差值为1,缺失个数为0,不会加入结果)
内容的提问来源于stack exchange,提问作者S Andrew
相关产品推荐
相关产品推荐

