如何解决对连续整数进行分组并允许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)
有没有办法在上述解决方案中纳入我的额外要求?如果没有,解决问题的最佳方法是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。