Строковое представление немного грубое, как насчет простого класса MyRange
, где вы можете просто выдать x in m
для числа x
и экземпляра m
из MyRange
?
>>> class MyRange:
...: def __init__(self, start, end):
...: self.start = start
...: self.end = end
...: def __contains__(self, x):
...: return self.start <= x <= self.end
...: def __repr__(self):
...: return '{}({!r}, {!r})'.format(type(self).__name__, self.start, self.end)
>>>
>>> lst = ["12-14", "15-16", "17-20"]
>>>
>>> my_ranges = [MyRange(*map(float, s.split('-'))) for s in lst]
>>> my_ranges
>>> [MyRange(12.0, 14.0), MyRange(15.0, 16.0), MyRange(17.0, 20.0)]
>>>
>>> any(13.5 in r for r in my_ranges)
>>> True
>>> any(11.7 in r for r in my_ranges)
>>> False
>>> any(17.5 in r for r in my_ranges)
>>> True
Проверка __contains__
завершается успешно, если x
равен конечным точкам, вы можете изменить это поведение, используя <
вместо <=
.