더북(TheBook)

Q&A

 

 

Q. 파이썬 배열 인덱스는 왜 1이 아니라 0에서 시작하는가?

A. 이런 관례는 기계어로 프로그래밍하던 시절에 생겨났다. 기계어로 프로그래밍할 때 배열 요소의 주소는 배열 시작 주소에 인덱스를 더해서 구한다. 인덱스를 1부터 시작하면 배열이나 문자열의 첫 번째 공간을 낭비하거나 매번 인덱스에서 1을 빼는 연산을 수행해야 하므로 CPU 처리 능력을 낭비하게 만든다.

 

Q. 배열 인덱스에 음수를 사용하면 어떻게 되나?

A. 약간 놀라운 일이 생긴다. 배열 a[]가 있을 때 인덱스 -ilen(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]를 나타낸다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.