Python/파이썬 기초

파이썬 리스트 인덱싱, 슬라이싱 경우의 수 총정리

jimmy_AI 2022. 2. 12. 20:45
반응형

Python List 인덱싱과 슬라이싱 방법

안녕하세요. 이번 시간에는 파이썬 기본 자료형 중 하나인 리스트 자료형에서

인덱싱과 슬라이싱을 통하여 원하는 자료를 추출해낼 수 있는 방법을

총망라하여 다루어보도록 하겠습니다.

 

 

리스트 인덱싱 기본 방법

먼저, 아래와 같은 자료가 총 5개인 List가 있다고 가정해보겠습니다.

a = [10, -2, 'nice', 15, 'good']

유의할 점은 파이썬에서는 숫자를 0부터 셈한다는 것 입니다.

 

이 점을 이용하면 직관적으로

0번째 자료는 10, 1번째 자료는 -2처럼 되고 있는 상황을 이해해볼 수 있습니다.

 

인덱싱은 n번째 자료 1개를 추출해내는 방법으로,

리스트 a에 대하여 n번째 자료를 가져오는 상황에서는 a[n]과 같은 문법으로 사용합니다.

# 인덱싱 예시
a[0] # 10
a[2] # 'nice'
a[4] # 'good'

 

 

리스트 역순 인덱싱(음수 인덱싱)

위의 예시에서는 정방향 순서를 기준으로 자료를 추출하는 인덱싱을 보았습니다.

이번에는 역방향 순서를 기준으로 자료를 가져오는 방법을 살펴보겠습니다.

 

가장 마지막 자료는 -1번째, 뒤에서 2번째 자료는 -2번째처럼 순서를 셈해주시면 되며,

a[-1]처럼 정방향 인덱싱과 같은 문법으로 사용해주시면 됩니다.

# 역순 인덱싱 예시
a[-1] # 'good'
a[-2] # 15
a[-5] # 10

 

 

 

다중 리스트 인덱싱

리스트 내에 다른 리스트가 포함되어 있는 다중 리스트에 대하여

복합적인 인덱싱하는 경우도 살펴보겠습니다.

 

아래와 같은 복합 리스트 b가 있다고 가정해보겠습니다.

b = [5, 17, [19, [4, 16]], 75, [13, 26]]

위 경우에서 16이라는 숫자를 가져오려면 어떻게 해야할까요?

 

먼저, b 전체를 기준으로 2번째 자료인 [19, [4, 16]]을 먼저 추출해야할 듯 합니다.

이후, 여기서 1번째 자료인 뒤쪽 리스트인 [4, 16]을 가져오고,

이 중 1번째 자료인 16을 추출하는 과정 순서로 이루어지면 될 것으로 보입니다.

 

이 과정을 코드로 나타내면 아래와 같이 이해해볼 수 있습니다.

b[2] = [19, [4, 16]]
b[2][1] = [4, 16]
b[2][1][1] = 16

b[2][1][1]과 같이 삼중 인덱싱을 통하여 최종적으로 원하는 자료인 16에 도달했습니다.

반응형

리스트 슬라이싱 1(: 이용)

이번에 다루어볼 내용인 슬라이싱은 리스트 내 원하는 위치들의 자료들만을 모아

새로운 부분 리스트를 형성하는 과정을 의미합니다.

 

먼저, 첫 번째 버전의 슬라이싱으로 n번째 ~ m-1번째까지 자료들로

부분 리스트를 재구성하는 :를 이용한 슬라이싱을 살펴보겠습니다.

리스트 a에 대하여 a[n:m]처럼 작성하면 n ~ m-1번째 자료의 부분 리스트가 슬라이싱됩니다.

 

이때, 앞 숫자 n을 생략하면 0으로 간주되며, 뒤 숫자 m을 생략하면 끝 자료까지 가져오는 것으로

간주됩니다. 또한, 음수를 활용한 인덱스 번호도 사용이 가능합니다.

a = [10, -2, 'nice', 15, 'good']

a[1:4] # [-2, 'nice', 15] (1 ~ 3번째 자료)
a[3:] # [15, 'good'] (3 ~ 끝 자료)
a[:-2] # [10, -2, 'nice'] (처음 ~ -3번째 자료)
a[2:3] # ['nice'] # (2 ~ 2번째 자료)

여기서 a[2:3]a[2]는 각각 결과가 ['nice']'nice'

부분 리스트자료 자체가 추출된 결과의 차이로 나타나고 있음을 주목해주시면 좋습니다.

이 차이가 슬라이싱인덱싱의 기능적인 차이입니다.

 

 

리스트 슬라이싱 2(:: 이용)

이번에는 다른 버전의 슬라이싱으로 n칸씩 건너뛰기 하여 부분 리스트를 형성할 수 있는

::를 이용한 슬라이싱 방법을 살펴보도록 하겠습니다.

 

m번째 위치 부터 시작하여 n칸씩 건너뛰고 싶은 경우는 a[m::n]처럼 작성해주시면 됩니다.

예를 들어, a[2::3]인 경우는 2, 5, 8, ... 번째의 자료들을 모아 부분 리스트를 만듭니다.

 

마찬가지로, 앞 숫자를 생략하면 처음 위치부터 시작으로 간주하게 되며,

:: 뒤에 음수를 적게 되면 역순 슬라이싱을 의미하게 됩니다.

c = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']

c[2::2] # ['c', 'e', 'g'] (2, 4, 6번째 자료)
c[::3] # ['a', 'd', 'g'] (0, 3, 6번째 자료)
c[5::-1] # ['f', 'e', 'd', 'c', 'b', 'a'] (5, 4, 3, 2, 1, 0번째 자료)
c[::-2] # ['h', 'f', 'd', 'b'] (-1, -3, -5, -7번째 자료)

참고로, 역순 슬라이싱의 경우에는 앞 숫자 생략 시 -1번째 자료부터 슬라이싱을

시작하게 됨을 유의해주세요.