对连续整数进行分组并允许1的间隙

问题描述

如有疑问,您可以随时编写自己的生成器:

def group_runs(li,tolerance=2):
    out = []
    last = li[0]
    for x in li:
        if x-last > tolerance:
            yield out
            out = []
        out.append(x)
        last = x
    yield out

演示:

list(group_runs(my_list))
Out[48]: [[0, 1, 2, 3, 5, 6], [10, 11], [15, 16, 18, 19, 20]]

解决方法

在Python中,给定一个排序的整数列表,我将按连续的值对它们进行分组, 允许间隔为1。

例如,给定一个列表my_list

In [66]: my_list
Out[66]: [0,1,2,3,5,6,10,11,15,16,18,19,20]

我想要以下输出:

[[0,6],[10,11],[15,20]]

现在,如果我不必忍受1的差距,我可以采用在说明的简洁解决方案:

import itertools
import operator
results = []
for k,g in itertools.groupby(enumerate(my_list),lambda (i,x):i-x):
        group = map(operator.itemgetter(1),g)
        results.append(group)

有没有办法在上述解决方案中纳入我的额外要求?如果没有,解决问题的最佳方法是什么?