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 parse_ranges = parse_ranges_v2