최근 누군가가 트위터에서 왜 Python이 0 기반 배열 인덱싱(이하 0 기반)을 사용하는지 묻고 이 주제에 대한 기사를 읽어 보라고 요청했습니다(매우 흥미롭습니다). 이것은 나에게 많은 추억을 가져다주었다. Python의 조상 중 하나인 ABC 언어는 1 기반의 인덱싱 방식(이하 1 기반)을 사용하는 반면, Python에 큰 영향을 미치는 또 다른 언어인 C 언어는 0 기반의 Way를 사용합니다. 제가 처음 배운 언어 중 일부(Algol, Fortran, Pascal)는 1 기반 언어였고 일부는 유동적이었습니다. 제가 Python에서 0 기반 인덱싱을 사용하기로 결정한 이유 중 하나는 Python의 슬라이스 구문 때문이라고 생각합니다.
먼저 슬라이스를 사용하는 방법을 살펴보겠습니다. 아마도 가장 일반적인 사용법은 "배열에서 처음 n 비트를 잘라냅니다." 또는 "값의 i번째 비트에서 시작하여 n 비트를 잘라냅니다."(전자는 실제로 i==시작 비트를 특수하게 사용하는 것입니다) . 보기 흉한 +1 또는 -1 보수로 표현하지 않고도 이 구문을 사용하면 매우 우아할 것입니다.
0 기반 인덱싱을 사용하면 Python의 반 개방 간격 슬라이싱 및 기본 일치 간격 슬라이싱 구문이 매우 아름다워집니다: a[:n] 및 a[i:i+n], 전자의 표준 쓰기는 a[0:n]입니다.
1-베이스 인덱싱 방법인 경우 a[:n]을 "처음 n개 요소를 취함"으로 표현하려면(불가능) 닫힌 간격 슬라이싱 구문을 사용하거나 이를 사용해야 합니다. 슬라이싱 구문에서 두 개의 매개변수 형태: 슬라이스의 시작 비트와 슬라이스의 길이. 1 기반 인덱싱을 사용하면 반 개방 간격 분할 구문이 우아하지 않게 됩니다. 이와 같이 닫힌 간격 슬라이싱 구문을 사용하면 i번째 위치에서 n개의 요소를 취한다는 것을 표현하려면 a[i:i+n-1]을 써야 합니다. 1부터 시작하는 인덱스를 사용한다면 슬라이스 시작 비트 + 길이의 형태를 사용하는 것이 더 적합한 것 같습니다. 이렇게 하면 a[i:n]을 쓸 수 있습니다. 실제로 ABC 언어는 이를 수행합니다. a@i|n이라는 고유한 표현을 사용합니다. (http://homepages.cwi.nl/~steven/abc/qr.html#EXPRESSIONS를 참조하세요.
그런데 index:length 메소드가 다른 상황에도 적용되나요? 솔직히 이것에 대해서는 별로 기억이 나지 않지만 반 개방형 간격 구문의 우아함에 매료되었던 것 같습니다. 특히 두 개의 슬라이싱 작업이 인접하고 첫 번째 슬라이싱 작업의 끝 인덱스 값이 두 번째 슬라이스의 시작 인덱스 값인 경우 너무 아름다워서 버릴 수 없습니다. 예를 들어, 배열을 두 지점 i와 j에서 세 부분으로 자르려고 합니다. 세 부분은 a[:i], a[i:j] 및 a[j:]가 됩니다.
이것이 내가 Python에서 0 기반 인덱싱을 사용하기를 원하는 이유입니다.
영어 원문: Python이 0 기반 인덱싱을 사용하는 이유
위 내용은 Python 언어의 창시자가 Python 배열 인덱스가 0에서 시작하는 이유를 설명합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!