Advertisement
DeaD_EyE

sequence homework // tricks inside

Apr 9th, 2018
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.90 KB | None | 0 0
  1. def adv_range(seq):
  2.     for element in seq.split(','):
  3.         if '-' in element:
  4.             start, _, stop = element.partition('-')
  5.             yield from range(int(start), int(stop)+1)
  6.         else:
  7.             yield int(element)
  8.  
  9. def safe_adv_range(seq, constructor=list):
  10.     try:
  11.         retval = constructor(adv_range(seq))
  12.     except Exception as e:
  13.         print(e)
  14.         retval = constructor()
  15.     return retval
  16.  
  17.  
  18. seq = '1-5, 7, 9, 10-13'
  19. result = safe_adv_range(seq)
  20. sorted_result = sorted(result)
  21.  
  22. as_set = set(result)
  23. # or
  24. as_set = safe_adv_range(seq, set)
  25.  
  26.  
  27. as_tuple = tuple(result)
  28. # or
  29. as_tuple = safe_adv_range(seq, tuple)
  30.  
  31.  
  32. # super special trick to get a kind of a Ordered Set
  33. # this works only since Python 3.6.
  34. like_ordered_set = safe_adv_range(seq, dict.fromkeys).keys()
  35.  
  36. # pre Python3.6
  37. like_ordered_set = safe_adv_range(seq, collections.OrderedDict.fromkeys).keys()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement