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