如何解决从数字列表中生成“有效”编码[重复]
|| 这个问题已经在这里有了答案:解决方法
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。