Bootstrap

python中整数的取值范围_在python中将整数列表转换为范围

python中是否存在可以将递增的整数列表转换为范围列表的内容?

例如,给定集合0,1,2,3,4,7,8,9,11我想得到0,4,7,9,11,11。

我可以编写一个程序来实现这一点,但我想知道在Python中是否有内置函数

好吧,我可以自信地说,我不知道这种功能。很难自信地说我不知道的东西不存在……

在stackoverflow.com/questions/3429510/&hellip中,几乎同样的问题被提出和回答。

>>> import this。

使用itertools.groupby()可以产生一个简洁但复杂的实现:

import itertools

def ranges(i):

for a, b in itertools.groupby(enumerate(i), lambda (x, y): y - x):

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)]

这真的很有用,我想知道您是否可以解释这个方法是如何工作的,这样我就能理解它的功能。如果可能的话,这会很好。

要使用"sorted(set(i))"处理非唯一和非排序的输入环绕"i",请参阅:stackoverflow.com

;