Python实现从数字列表中提取所有连续数字序列
提取列表中的连续数字序列
给定列表:
lst = [0, 1, 3, 4, 6, 9, 10, 11, 12, 13, 15]
需要将其中连续递增1的数字序列提取为嵌套列表,期望结果:
[[0, 1], [3, 4], [6], [9, 10, 11, 12, 13], [15]]
方法一:用itertools.groupby实现(简洁高效)
利用groupby按元素与索引的差值分组——连续递增1的元素和对应索引的差值固定,以此作为分组依据:
from itertools import groupby lst = [0, 1, 3, 4, 6, 9, 10, 11, 12, 13, 15] # 用迭代器生成索引,计算元素与索引的差值作为分组key result = [list(group) for _, group in groupby(lst, key=lambda x, idx_iter=iter(range(len(lst))): x - next(idx_iter))] print(result)
方法二:优化遍历判断逻辑
如果不想引入额外库,可以优化你已有的遍历思路,让代码更简洁清晰:
lst = [0, 1, 3, 4, 6, 9, 10, 11, 12, 13, 15] if not lst: result = [] else: result = [[lst[0]]] for num in lst[1:]: # 判断当前数字是否与最后一个序列的末尾连续 if num == result[-1][-1] + 1: result[-1].append(num) else: result.append([num]) print(result)
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

