Issue
So, I have a function which outputs a list of ranges, e.g. [range(1,5),range(8,13)]. I need to iterate through those integers which are not in a range in this list. For example, using the previous list I would like to be able to iterate through 5-7 in the previously mentioned list.
The lists and ranges i will be working with will likely be rather large (i.e. with integers ranging from 0 to many millions).
Is there any way to do this without converting each range to a list of numbers and using a if not in statement?
Solution
Using Mark’s template:
r = [range(1,5), range(8,13), range(20, 25), range(22, 27), range(30, 35)]
def missing(r):
stop = r[0].stop
for a in r:
yield from range(stop, a.start)
stop = max(stop, a.stop)
print(list(missing(r)))
Output:
[5, 6, 7, 13, 14, 15, 16, 17, 18, 19, 27, 28, 29]
Answered By – Kelly Bundy
Answer Checked By – Marilyn (AngularFixing Volunteer)