问题描述
||
这个问题已经在这里有了答案:
解决方法
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