Python 기초

인덱싱과 슬라이싱

인덱싱

인덱싱(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[음수 인덱스 + 리스트 길이]와 같이 계산하면 됩니다.

 

WARNING

리스트의 크기를 넘어서는 인덱스를 사용하면 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']