Skip to content

Instantly share code, notes, and snippets.

@mohitranka
Created June 28, 2009 18:49
Show Gist options
  • Save mohitranka/137342 to your computer and use it in GitHub Desktop.
Save mohitranka/137342 to your computer and use it in GitHub Desktop.
#Author - Mohit Ranka
def rangify(input_list):
"""
Takes list of integers as input and returns a string as its range representation
"""
output_string = ""
hold = False
input_list = sorted(list(set(input_list)))
prev_val = input_list[0]
for i,curr_val in enumerate(input_list):
if hold and curr_val!=prev_val+1:
output_string += '-%s'%(prev_val)
if curr_val==prev_val+1:
hold = True
if i==(len(input_list)-1):
output_string+='-%s'%(curr_val)
else:
hold = False
if i==0:
output_string+='%s'%(curr_val)
else:
output_string+=',%s'%(curr_val)
prev_val=curr_val
return output_string
if __name__ == '__main__':
assert rangify([1])=='1'
assert rangify([1,2])=='1-2'
assert rangify([1,2,3,4])=='1-4'
assert rangify([1,3])=='1,3'
assert rangify([1,7,3,3,4,8,9,10])=='1,3-4,7-10'
assert rangify([1,2,7,3,3,4,8,9,10])=='1-4,7-10'
assert rangify([1,4,5,6,8])=='1,4-6,8'
assert rangify([2,3,4,5,7,8,10,11])=='2-5,7-8,10-11'
assert rangify([2,3,4,9,5,7,8,10,11])=='2-5,7-11'
assert rangify([6,9,4,10,98,11,100,99,94,100,97])=='4,6,9-11,94,97-100'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment