2020-12-21 23:14:20 +01:00
|
|
|
def parse_ranges_v1(range_string):
|
|
|
|
|
"""This version causes a memory error for huge ranges..."""
|
|
|
|
|
ranges = [tuple(map(int, r.split("-"))) for r in range_string.split(",")]
|
|
|
|
|
result = []
|
|
|
|
|
for start, stop in ranges:
|
|
|
|
|
result = [*result, *list(range(start, stop + 1))]
|
|
|
|
|
for number in result:
|
|
|
|
|
yield number
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def parse_ranges_v2(range_string):
|
|
|
|
|
"""This version seems more memory efficient."""
|
|
|
|
|
ranges = [tuple(map(int, r.split("-"))) for r in range_string.split(",")]
|
|
|
|
|
for start, stop in ranges:
|
|
|
|
|
for number in range(start, stop + 1):
|
|
|
|
|
yield number
|
|
|
|
|
|
|
|
|
|
|
2020-12-21 23:24:17 +01:00
|
|
|
def parse_ranges_v3(range_string):
|
|
|
|
|
"""This version handles single digits, Bonus2."""
|
|
|
|
|
ranges = [tuple(map(int, r.split("-"))) for r in range_string.split(",")]
|
|
|
|
|
for limits in ranges:
|
|
|
|
|
if len(limits) == 1:
|
|
|
|
|
yield limits[0]
|
|
|
|
|
else:
|
|
|
|
|
start, stop = limits
|
|
|
|
|
for number in range(start, stop + 1):
|
|
|
|
|
yield number
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
parse_ranges = parse_ranges_v3
|