如何将包含连续递增整数的Python列表拆分为嵌套子列表
Python 连续递增整数列表分组实现方案
下面提供两种常用的实现方式,都可以满足需求:
方法1:基础遍历实现(逻辑清晰,无额外依赖)
思路很直接:遍历列表时持续追踪当前连续子序列,遇到不连续的元素就把当前子序列存入结果,开启新的子序列即可。
def group_continuous(nums): if not nums: return [] result = [] current_group = [nums[0]] for num in nums[1:]: if num == current_group[-1] + 1: current_group.append(num) else: result.append(current_group) current_group = [num] # 遍历结束后加入最后一组 result.append(current_group) return result # 测试效果 example = [2, 43, 44, 64, 143, 144, 145, 146, 147, 148, 178, 179, 180, 181, 182, 183, 184, 211] print(group_continuous(example)) # 输出:[[2], [43, 44], [64], [143, 144, 145, 146, 147, 148], [178, 179, 180, 181, 182, 183, 184], [211]]
方法2:itertools.groupby 简洁实现(更符合Python习惯)
利用连续递增整数的特征:元素值 - 元素索引的结果是固定值,把这个值作为分组键即可快速完成分组。
from itertools import groupby def group_continuous(nums): return [list(group) for _, group in groupby(enumerate(nums), key=lambda x: x[1] - x[0])] # 测试效果和方法1完全一致
注意事项
如果你的原始列表没有预先排序,需要先调用sorted(nums)排序后再传入上述函数,否则会出现分组不符合预期的问题。
内容的提问来源于stack exchange,提问作者krcoder
相关产品推荐
相关产品推荐

