Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将整数转换为范围,但带有允许的孔_Python_Range - Fatal编程技术网

Python 将整数转换为范围,但带有允许的孔

Python 将整数转换为范围,但带有允许的孔,python,range,Python,Range,什么是将一组整数转换为范围(这已经有问题)但有某种可接受的裕度的最符合Python的方式 例如,我们有: 1,2,3,4,5,10,11,15,45,46,47,75,76,80,85 所以通常我们会得到: {1,5}、{10,11}、{15,15}、{45,47}、{75,76}、{80,80}、{85,85} 但我们希望允许20的保证金,所以只有当上一个项目和下一个项目之间的差额大于20时,才会创建下一个范围 因此,我们应该得到: {1,15},{45,47},{75,85}如果您可以从提供

什么是将一组整数转换为范围(这已经有问题)但有某种可接受的裕度的最符合Python的方式

例如,我们有: 1,2,3,4,5,10,11,15,45,46,47,75,76,80,85

所以通常我们会得到: {1,5}、{10,11}、{15,15}、{45,47}、{75,76}、{80,80}、{85,85}

但我们希望允许20的保证金,所以只有当上一个项目和下一个项目之间的差额大于20时,才会创建下一个范围

因此,我们应该得到:
{1,15},{45,47},{75,85}

如果您可以从提供当前解决方案开始,我们可以确定是否有更具python风格的替代方案可用。如果您正在寻找对工作代码的注释/改进,也就是在主题上,我怀疑您从“填充序列中小于N的任何漏洞”开始,然后创建列表。这意味着-找到“相反”的集合-不包含的数字;使用链接中的方法查找运行长度;删除行程长度大于N的行程;然后合并两个集合。
def to_ranges(nums):
  rngs = []
  start = nums[0]
  curr = start
  for n in nums[1:]:
    if n > curr + 20:
      rngs.append(range(start, curr + 1))
      start = n
    curr = n
  rngs.append(range(start, curr + 1))
  return rngs

>>> to_ranges([1, 2, 3, 4, 5, 10, 11, 15, 45, 46, 47, 75, 76, 80, 85])
[range(1, 16), range(45, 48), range(75, 86)]