使用
itertools.groupby()产生了一个简洁但棘手的实现:
import itertoolsdef ranges(i): for a, b in itertools.groupby(enumerate(i), lambda pair: pair[1] - pair[0]): b = list(b) yield b[0][1], b[-1][1]print(list(ranges([0, 1, 2, 3, 4, 7, 8, 9, 11])))
输出:
[(0, 4), (7, 9), (11, 11)]



