fork download
  1. import itertools
  2.  
  3. def resetable_counter(start):
  4. while True:
  5. for i in itertools.count(start):
  6. reset = yield i
  7. if reset:
  8. start = reset
  9. break
  10.  
  11. def ranges(seq):
  12. start, end = seq[0], seq[0]
  13. counter = resetable_counter(start)
  14. for count, item in zip(counter, seq):
  15. if not count == item:
  16. yield start, end
  17. start, end = item, item
  18. counter.send(item)
  19. end = item
  20. yield start, end
  21.  
  22. print(list(ranges([1,2,3,4,5,8,9,10,11,200,201,202])))
  23.  
Success #stdin #stdout 0.02s 4736KB
stdin
Standard input is empty
stdout
[(1, 5), (8, 8), (9, 9), (10, 10), (11, 11), (200, 200), (201, 201), (202, 202)]