19.2 리스트의 요소 접근하고 값 할당하기

리스트에 저장된 각 값을 요소(element)라고 합니다. 요소에 접근할 때는 리스트 뒤에 [ ](대괄호)를 사용하며 [ ] 안에 각 요소의 인덱스를 지정해주면 됩니다.

  • 리스트[인덱스]
>>> a = [38, 21, 53, 62, 19]
>>> a[0]    # 리스트의 첫 번째(인덱스 0) 요소 출력
38
>>> a[2]    # 리스트의 세 번째(인덱스 2) 요소 출력
53
>>> a[4]    # 리스트의 다섯 번째(인덱스 4) 요소 출력
19

인덱스(index, 색인)는 위치 값을 뜻하는데 국어사전 옆면에 ㄱ, ㄴ, ㄷ으로 표시해 놓은 것과 비슷합니다. 여기서 주의할 점은 리스트의 인덱스는 항상 0부터 시작한다는 점입니다(대다수의 프로그래밍 언어는 인덱스가 0부터 시작합니다). 따라서 리스트 a의 첫 번째 요소는 a[0]이 됩니다. 꼭 기억해두세요.

그림 19-1 인덱스로 리스트의 요소에 접근
그림 22 1 인덱스로 리스트의 요소에 접근

리스트에 인덱스를 지정하지 않은 상태는 리스트 전체를 뜻합니다. 따라서 리스트 a를 출력하면 [ ]를 포함하여 리스트 전체가 출력됩니다.

>>> a = [38, 21, 53, 62, 19]
>>> a
[38, 21, 53, 62, 19]

지금까지 리스트에서 인덱스를 양수만 지정했습니다. 그러면 리스트에 음수 인덱스를 지정하면 어떻게 될까요?

>>> a = [38, 21, 53, 62, 19]
>>> a[-1]   # 리스트의 뒤에서 첫 번째(인덱스 -1) 요소 출력
19
>>> a[-5]   # 리스트의 뒤에서 다섯 번째(인덱스 -5) 요소 출력
38

먼저 리스트에 인덱스를 음수로 지정하면 뒤에서부터 요소에 접근하게 됩니다. 즉, -1은 뒤에서 첫 번째, -5는 뒤에서 다섯 번째 요소입니다.

리스트의 양수 인덱스와 음수 인덱스를 그림으로 표현하면 다음과 같은 모양이 됩니다.

그림 19-2 리스트의 양수 인덱스와 음수 인덱스
그림 22 2 리스트의 양수 인덱스와 음수 인덱스

그럼 리스트의 범위를 벗어난 인덱스에 접근하면 어떻게 될까요?

>>> a = [38, 21, 53, 62, 19]
>>> a[5]   # 인덱스 5는 리스트의 범위를 벗어났으므로 에러
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    a[5]
IndexError: list index out of range

리스트의 요소 개수는 5개인데 a[5]와 같이 지정하면 리스트의 범위를 벗어나게 되므로 에러가 발생합니다. 왜냐하면 인덱스는 0부터 시작하므로 마지막 요소의 인덱스는 4이기 때문이죠. 즉, 마지막 요소의 인덱스는 리스트의 요소 개수보다 1 작습니다. 이 부분은 리스트를 사용할 때 자주 틀리는 부분이므로 꼭 기억해두세요.

이제 리스트의 요소에 값을 할당해보겠습니다. 리스트는 [ ]로 요소에 접근한 뒤 값을 할당합니다.

  • 리스트[인덱스] = 값
>>> a = [0, 0, 0, 0, 0]    # 0이 5개 들어있는 리스트
>>> a[0] = 38
>>> a[1] = 21
>>> a[2] = 53
>>> a[3] = 62
>>> a[4] = 19
>>> a
[38, 21, 53, 62, 19]
>>> a[0]
38
>>> a[4]
19

a[0] = 38처럼 [ ]에 인덱스를 지정한 뒤 값을 할당하면 됩니다. 단, 이때도 리스트의 범위를 벗어난 인덱스는 지정할 수는 없습니다.

>>> a[5] = 90
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    a[5] = 90
IndexError: list assignment index out of range