Границы среза полуоткрыты , это очень стандартно для многих языков программирования.Одним из преимуществ является то, что он делает длину диапазона очевидной (2-0 = 2).В частности, это обычно делают:
s[start:start+len]
И очевидно, что это выбирает len
элементов из среза, начиная с start
.Если диапазон будет полностью закрыт (включая обе границы), в коде должно быть много -1
s для обработки срезов и сублицензий.
Он работает аналогично в диапазонах C ++, Python и т. Д.Вот несколько рассуждений из ответа C ++ , приписываемого Дейкстре:
Вы хотите, чтобы размер диапазона был простой разницей - начало;
, включая нижнюю границу, является более "естественным", когда последовательности вырождаются в пустые, а также потому, что альтернатива (исключая нижнюю границу) потребует существования "один перед началом""часовой показатель.