인덱싱(indexing)이란 리스트에서 하나의 요소를 인덱스 연산자를 통하여 참조(접근)하는 것을 의미합니다.
인덱스는 정수이며, 항상 0에서부터 시작한다는 것을 잊으면 안됩니다. 1이 아니라 0부터 시작합니다.
redvelvet_member = ["아이린", "슬기", "웬디", "조이", "예리"]
print(redvelvet_member[1])
<실행 결과>
슬기

리스트의 인덱스는 0에서 (len(redvelvet_member) - 1)까지의 범위를 가집니다.
redvelvet_member[index]는 하나의 변수와 똑같이 사용이 가능합니다. 예를 들어 redvelvet_member[1]의 값을 변수 seulgi에 할당할 수 있습니다.
seulgi = redvelvet_member[1]
파이썬에서는 음수 인덱스가 가능합니다. redvelvet_member[-1]은 리스트의 마지막 원소 "예리"를 나타냅니다.
redvelvet_member[-4]는 리스트의 마지막에서 네 번째에 있는 요소 "슬기"를 나타냅니다.
음수 인덱스가 사용될 때는 list[음수 인덱스 + 리스트 길이]와 같이 계산하면 됩니다.
리스트의 크기를 넘어서는 인덱스를 사용하면 IndexError가 발생됩니다. 예를 들어 다음과 같은 경우에는 오류가 발생됩니다.
redvelvet_member = ["아이린", "슬기", "웬디", "조이", "예리"]
print(redvelvet_member[2014])
<실행 결과>
IndexError: list index out of range
슬라이싱(slicing)은 리스트 안에서 범위를 지정하여 원하는 요소들을 선택하는 연산입니다. list[start : end]와 같은 형식을 사용합니다.
list[start : end]라고 하면 start 인덱스에 있는 요소부터 (end-1) 인덱스에 있는 요소까지 선택됩니다.
예를 들어 거듭 제곱 값들을 모아서 리스트 안에 저장하였다고 합시다.
squares = [0, 1, 2, 4, 9, 16, 25, 36, 49]
print(squares[3:6]) # 슬라이싱은 새로운 리스트를 반환합니다.
<실행 결과>
[4, 9, 16]
슬라이싱 연산은 요구된 요소를 포함하는 부분 리스트를 반환합니다. 즉 슬라이싱 연산을 하면 리스트의 새로운 복사본을 얻을 수 있습니다.
슬라이싱 연산에서 시작 인덱스와 종료 인덱스는 생략될 수 있습니다. 인덱스가 생략되면 시작 인덱스는 0이 되고 종료 인덱스는 (리스트 길이 - 1) 이 됩니다.
squares = [0, 1, 2, 4, 9, 16, 25, 36, 49]
print(squares[:3])
print(squares[4:])
print(squares[:])
<실행 결과>
[0, 1, 2]
[9, 16, 25, 36, 49]
[0, 1, 2, 4, 9, 16, 25, 36, 49]
squares[ : 3}은 squares[0 : 3]과 동일하고 squares[4 : ]는 squares[4 : len(squares)] 와 동일합니다.
squares[ : ]에서는 시작 인덱스와 종료 인덱스가 모두 생략된 형태로 squares[0 : len(squares)] 와 같습니다.
문자열과는 다르게 리스트는 변경 가능합니다. 즉 우리는 언제든지 리스트의 내용을 변경할 수 있습니다.
squares = [0, 1, 2, 4, 9, 16, 25, 36, 48] # 제곱값이 잘못된 부분이 있습니다.
squares[8] = 49 # 제곱값이 잘못된 값을 변경합니다.
print(squares)
<실행 결과>
[0, 1, 2, 4, 9, 16, 25, 36, 49]
우리는 슬라이싱에 값을 대입하는 것도 가능합니다. 리스트의 크기를 변경하는 것도 가능합니다.
공백 리스트로 모든 요소들을 대체하여서 리스트의 내용을 완전히 삭제하는 것도 가능합니다.
letters = ['r', 'e', 'd', 'v', 'e', 'l', 'v', 'e', 't']
print(letters)
letters[2 : 5] = ['D', 'V', 'E'] # 리스트의 일부를 변경합니다.
print(letters)
letters[2 : 5] = [] # 리스트의 일부를 삭제합니다.
print(letters)
<실행 결과>
['r', 'e', 'd', 'v', 'e', 'l', 'v', 'e', 't']
['r', 'e', 'D', 'V', 'E', 'l', 'v', 'e', 't']
['r', 'e', 'l', 'v', 'e', 't']