问题描述
如有疑问,您可以随时编写自己的生成器:
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)
有没有办法在上述解决方案中纳入我的额外要求?如果没有,解决问题的最佳方法是什么?