Usage¶
from __future__ import print_function # Python 2 and 3 compatibility
from intspan import intspan
s = intspan('1-3,14,29,92-97')
s.discard('2,13,92')
print(s)
print(repr(s))
print(list(s))
yields:
1,3,14,29,93-97
intspan('1,3,14,29,93-97')
[1, 3, 14, 29, 93, 94, 95, 96, 97]
While:
>>> for n in intspan('1-3,5'):
>>> print(n)
1
2
3
5
Most set operations such as intersection, union, and so on are available just
as they are in Python’s set
. In addition, if you wish to extract the
contiguous ranges:
>>> for r in intspan('1-3,5,7-9,10,21-22,23,24').ranges():
>>> print(r)
(1, 3)
(5, 5)
(7, 10)
(21, 24)
Note that these endpoints represent
closed intervals,
rather than the half-open intervals commonly used with Python’s range()
.
If you combine intspan
ranges with Python generators, you’ll
have to increment the stop value by one yourself to create the suitable
“half-open interval.”
There is a corresponding range-oriented constructor:
>>> intspan.from_ranges([ (4,6), (10,12) ])
intspan('4-6,10-12')
A convenience from_range
method creates a contiguous
intspan
from a given low to a high value.:
>>> intspan.from_range(8, 12)
intspan('8-12')
The universe
method returns the covering set or “implied universe” of
an intspan
:
>> intspan('1,3,5,7').universe()
intspan('1-7')
To find the elements not included, you can use the complement
method:
>>> items = intspan('1-3,5,7-9,10,21-24')
>>> items.complement()
intspan('4,6,11-20')
The “missing” elements are computed as any integers between the
intspan
’s minimum and maximum values that aren’t included. If you’d like
to customize the intended low
and high
bounds, you can give those
explicitly.:
>>> items.complement(high=30)
intspan('4,6,11-20,25-30')
You can use the difference
method or -
operator
to find the complement with respect to an arbitrary set, rather than just
an expected contiguous range.