В Python мне интересно, почему срезы работают так, как они делают. Почему Guido van Rossum определил a[start:end]
, чтобы включить a[start]
, но неa[end]
, или как в заголовке, почему a[0:1]
содержит только первый элемент, а не первые два?Поведение нарезания и индексации диапазона Python
Это похоже на шаг назад от поведения индексации MATLAB.
EDIT: Причина, по которой я задал этот вопрос, заключается в том, что это путано, что a[0:0]
пуст. Но я не разрабатывал популярный язык, так что я знаю.
Потому что не включая конечный индекс, аккуратно подходит для индексации на основе 0. 'range (10)' производит индексы от 0 до 9, нарезка с 'sequence [: len (sequence)]' работает и т. д. –
Я отмечаю, что MATLAB использует индексирование на основе 1, что означает, что индексирование закрытого конца делает некоторые смысл. Однако вы не получите симпатичный 'a == a [: end] + [end:]' инвариант, который мы имеем в Python в MATLAB. –