Представление диапазона значений в PythonPython

Программы на Python
Anonymous
Представление диапазона значений в Python

Сообщение Anonymous »

Меня интересует представление диапазона, аналогичного типу Range в Guava, в Python. В частности, он должен иметь начало и конец и представлять все значения между ними (в качестве первого прохода меня устраивает представление только канонического открытого-закрытого диапазона, т. е. [5,10), но правильно представление любого открытого/закрытого диапазона было бы разумной функцией).

Мне известна встроенная функция range(), но я намерен поддерживать произвольные типы (или, в частности, даты, в моем случае).

Глядя на иерархию типов Python, кажется, что диапазон может быть последовательностью или набором тип довольно логично, но я не уверен, что имеет больше смысла: не лучше ли было бы отказаться от включения моего класса в эту иерархию и просто реализовать то поведение, которое я хочу.

Как последовательность:
  • Достаточно хорошо соответствует спецификации, это «конечный упорядоченный набор».
    Диапазон можно подсчитывать, разрезать и перебирать.
  • Однако потенциально я хочу поддерживать неограниченные диапазоны, например [0,+∞), так что, возможно, сказанное выше неверно.
Как набор :
  • Немного менее соответствует спецификациям, поскольку диапазон явно упорядочен.
  • Концептуально больше похоже на диапазон, поскольку теоретико-множественные операции, такие как пересечение и объединение, имеют больше смысла.
  • Правильное представление того, что содержит проверки, эффективно.
Как отдельная структура:
  • Мы теряем преимущества следования шаблонам вышеуказанных типов (нам пришлось бы определить например, отдельный метод range.slice())
  • Но мы более четко заявляем, что эту структуру также не следует путать с этими типами. Тот факт, что диапазон Guava не выходит за пределы API коллекции, похоже, подтверждает этот аргумент.
Я любопытно, что здесь кажется наиболее питоническим, и создавал ли кто-нибудь такие структуры данных самостоятельно.

Подробнее здесь: https://stackoverflow.com/questions/236 ... -in-python

Вернуться в «Python»