如何高效循环实现多组严格递增相邻列表的间隙数值查找?
解决多组严格递增列表间的间隙数字问题
针对你提到的多组严格递增且后一组元素全大于前一组的列表,要提取相邻列表之间的数字,最简洁高效的方式是配对相邻列表并生成区间数字,具体实现如下:
核心思路
把所有列表放在一个大列表中,遍历每一对相邻的列表组合:取前一个列表的最后一个元素+1作为起始值,后一个列表的第一个元素作为结束值,用range生成这个区间内的所有数字,最后收集所有间隙结果。
代码实现
循环写法
# 定义所有列表的集合 all_lists = [[1,2,3], [6,7,8], [10,11,12]] gaps = [] # 遍历相邻的列表对 for prev_list, curr_list in zip(all_lists, all_lists[1:]): # 生成间隙数字列表 gap = list(range(prev_list[-1] + 1, curr_list[0])) gaps.append(gap) print(gaps) # 输出: [[4, 5], [9]]
更简洁的列表推导式写法
如果追求代码紧凑,也可以用列表推导式一行搞定:
all_lists = [[1,2,3], [6,7,8], [10,11,12]] gaps = [list(range(prev[-1]+1, curr[0])) for prev, curr in zip(all_lists, all_lists[1:])]
说明
zip(all_lists, all_lists[1:])会自动将相邻的两个列表配对,比如all_lists的第1个和第2个列表、第2个和第3个列表,以此类推。- 这种方法只需要一次遍历,时间复杂度为O(k + t)(k是列表的组数,t是所有间隙数字的总数),属于高效的实现方式。
内容的提问来源于stack exchange,提问作者sensationti
相关产品推荐
相关产品推荐

