Q&A
Q. 파이썬 배열 인덱스는 왜 1
이 아니라 0
에서 시작하는가?
A. 이런 관례는 기계어로 프로그래밍하던 시절에 생겨났다. 기계어로 프로그래밍할 때 배열 요소의 주소는 배열 시작 주소에 인덱스를 더해서 구한다. 인덱스를 1
부터 시작하면 배열이나 문자열의 첫 번째 공간을 낭비하거나 매번 인덱스에서 1
을 빼는 연산을 수행해야 하므로 CPU 처리 능력을 낭비하게 만든다.
Q. 배열 인덱스에 음수를 사용하면 어떻게 되나?
A. 약간 놀라운 일이 생긴다. 배열 a[]
가 있을 때 인덱스 -i
는 len(a) - i
의 단축 표기이다. 예를 들어 배열의 마지막 요소는 a[-1]
이나 a[len(a) - 1]
로, 첫 번째 요소는 a[-(len)a]
나 a[0]
으로 접근할 수 있다. -len(a)
에서 len(a) - 1
이외의 인덱스를 사용해 배열에 접근하면 파이썬은 IndexError
예외를 발생시킨다.
Q. 슬라이스 a[i:j]
에 a[i]
는 포함하지만 a[j]
는 포함하지 않는 이유는?
A. 이 표기법은 왼쪽 끝은 포함하지만 오른쪽 끝은 포함하지 않는 range()
에 정의된 범위와 일관성을 유지한다. 그리고 이러한 성질 때문에 여러 가지 매력적인 특성을 가진다. 예를 들어 j - i
는 부분 배열(subarray)의 길이, a[0:len(a)]
는 전체배열, a[i:i]
는 빈 배열, a[i:j] + a[j:k]
는 부분 배열 a[i:k]
를 나타낸다.