从数字列表中生成“有效”编码[重复]

问题描述

||                                                                                                                   这个问题已经在这里有了答案:                                                      

解决方法

def get_groups(lst):
    slices = [i+1 for i,v in enumerate(zip(lst,l[1:])) if v[0] != v[1]-1] 
    slices = [0] + slices + [len(lst)]
    for start,end in zip(slices,slices[1:]):
        yield lst[start:end]

>>> list(get_groups([1,2,3,4,5,6,7,8,9,10,11,12,13,19,21,22,23,999,1000,1001]))
[[1,13],[19],[21,23],[999,1001]]
要么
def get_ranges(lst):
    slices = [i+1 for i,l[1:])) if v[0] != v[1]-1]
    slices = [0] + slices + [len(lst)]
    for start,slices[1:]):
        yield \"%d-%d\" % (lst[start],lst[end-1])

>>> list(get_ranges([1,1001]))
[\'1-13\',\'19-19\',\'21-23\',\'999-1001\']
    ,
def compress(nums):
    nums = [int(i) for i in nums.strip().split(\',\')]
    answer = []
    start = nums[0]
    prev = nums[0]
    for num in nums:
        if num-prev != 1:
            answer.append(\"%d-%d\" %(start,prev))
            start = num
        prev = num
    answer.append(\"%d-%d\" %(start,prev))
    return answer[1:]

>>> compress(\"1,1001\")
[\'1-13\',\'999-1001\']
希望这可以帮助     ,
l = [1,1001]
range_pos = []
start=0
end=0
for i in range(1,len(l)):
    if l[i] - l[i-1] == 1:
        end = i
    else:
        range_pos.append((start,end))
        start = end = i
range_pos.append((start,end))
ranges = [\"%s-%s\" % (l[s],l[e]) if s < e else str(l[s]) for (s,e) in range_pos]
print \',\'.join(ranges)
给予:
1-13,21-23,999-1001
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...