Weka-inspired index and range using human-readable 1-based indices and placeholders,
e.g.: last, first-last, 1-10,12,20-last.
Available placeholders:
first- the first indexsecond- the second indexthird- the third indexlast_2- the third to last indexlast_1- the second to last indexlast- the last index
pip install simple_range
-
Index
- The
simple_range.Indexclass parses and interprets a single index. - The
simple_range.index_valuemethod is convenience method to immediately parse and return an index as int.
- The
-
Range
- The
simple_range.Rangeclass parses and interprets ranges. - The
simple_range.range_indicesmethod is convenience method to immediately parse and return int indices.
- The
The following code:
from simple_range import Range, range_indices
r = Range("1-3", maximum=10)
print(r, "-->", r.indices())
r = Range("first-last", maximum=10)
print(r, "-->", r.indices(zero_based=False))
r = Range("first-3,11,14-14,30,last", maximum=40)
print(r, "-->", r.indices())
print(r, "-->", r.indices(zero_based=False))
print(range_indices("2-last_2", maximum=10))Will generate this output:
1-3 --> [0, 1, 2]
first-last --> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
first-3,11,14-14,30,last --> [0, 1, 2, 10, 13, 29, 39]
first-3,11,14-14,30,last --> [1, 2, 3, 11, 14, 30, 40]
[1, 2, 3, 4, 5, 6, 7]
And this code:
from simple_range import Index, index_value
r = Index("1", maximum=10)
print(r, "-->", r.value())
r = Index("second", maximum=10)
print(r, "-->", r.value(zero_based=False))
r = Index("last", maximum=40)
print(r, "-->", r.value())
print(r, "-->", r.value(zero_based=False))
print(index_value("last_1", maximum=100, zero_based=False))outputs this:
1 --> 0
second --> 2
last --> 39
last --> 40
99