개발 프로세스/Back-end

[Python] 리스트 인덱싱과 슬라이싱

slowreem 2021. 7. 14. 02:24

인덱싱(indexing)이란?


인덱싱이란 리스트에 있는 값에 접근하기 위해, 이 값의 상대적은 주소(offset)를 사용하는 것이다. 첫 번째 값을 0으로 했을 때 첫 번째 값과 얼마나 떨어져 있는지를 표현한 값으로 인덱스 주소, 인덱스값이라고 한다.

 

* 리스트의 주소값은 왜 0부터 시작할까?

1부터 시작하는 것보다 0부터 시작하면 이진수 관점에서 메모리를 절약할 수 있다. 또한 진수에서 00부터 사용할 수 있는 장점도 있다.

 

 

cities = ['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원']

 

* cities 변수의 인덱스

'서울' '부산' '인천' '대구' '대전' '광주' '울산' '수원'
인덱스 0 1 2 3 4 5 6 7

 

print(cities[0])
print(cities[2])
print(len(cities))

>> 서울

>> 인천

>> 8

 

 

 

슬라이싱(slicing)이란?


리스트의 인덱스를 사용하여 전체 리스트에서 일부를 잘라내어 반환한다. 파이썬의 리스트에서 마지막 인덱스값은 출력되지 않는다. '마지막 인덱스 - 1'까지만 출력된다. 마지막 인덱스가 다음 리스트의 시작 인덱스가 되어 코드를 작성할 때 쉽게 이해할 수 있다는 장점이 있다.

 

# cities >= 0 and cities < 5
cities[0:5]

>> ['서울', '부산', '인천', '대구', '대전']

 

 

# cities >= 5
cities[5:]

>> ['광주', '울산', '수원']

 

 

 

 

 

리버스 인덱스(reverse index)


마지막 값부터 -1을 할당하여 첫 번째 값까지 역순으로 올라오는 방식이다.

 

cities = ['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원']
print(cities[-8:])

>> ['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원']

 

 

* cities 변수의 리버스 인덱스

'서울' '부산' '인천' '대구' '대전' '광주' '울산' '수원'
인덱스 -8 -7 -6 -5 -4 -3 -2 -1

 

 

 

 

증가값 (step)


슬라이싱에서는 시작 인덱스와 마지막 인덱스 외에 마지막 자리에 증가값을 넣을 수 있다.

 

변수명[시작 인덱스 : 마지막 인덱스 : 증가값]

 

cities = ['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원']

# 2칸 간격으로 출력/ 시작인덱스, 마지막인덱스가 비어있으므로 전체 출력
cities[::2]

# 역방향으로 출력/ 시작인덱스, 마지막인덱스가 비어있으므로 전체 출력
cities[::-1]

>> cities = ['서울', '인천', '대전', '울산']

>> cities = ['수원', '울산', '광주', '대전', '대구', '인천', '부산', '서울']