파이썬 순서가 있는 데이터 종류 (list, tuples, string)에 인덱싱과 슬라이싱을 사용할 수 있습니다.
인덱싱 (indexing)
파이썬의 순서가 있는 데이터의 인덱스는 0부터 시작합니다. 네거티브 인덱스를 사용할 때는 데이터의 오른쪽부터 -1에서 시장하여 -1씩 줄어듭니다.
아래의 그림에서 data.csv의 첫 번째 인덱스는 d, 6번째 인덱스 ( 네거티브 3번째 인덱스)는 c입니다.
my_pets = ["dog", "cat", "bird"]
my_pets[0]
인덱스 0은 데이터 첫 번째 아이템을 의미합니다.
네거티브 인덱스
-1은 마지막 인덱스, -2는 마지막에서 두 번째 인덱스입니다.
my_pets[-1]
네거티브 인덱스는 데이터 오른쪽부터 -1에서 시작합니다.
tuple에서 인덱싱
a=('Fred', 23, 'Senior')
a[1]
위의 tuple의 인덱스 0은 'Fred', 인덱스 1은 23, 인덱스 2는 'Senior'
string에서 인덱싱
‘Fred’[0]
'Fred' string의 첫 번째 인덱스는 'F'입니다.
슬라이싱 (slicing)
슬라이스는 콜론 (:)을 사용하여 첫 번째 인덱스, 마지막 인덱스, 인덱스 폭을 지정할 수 있습니다.
my_pets = ["dog", "cat", "bird"]
print(my_pets[0:2])
my_pets 리스트에서 0:2를 사용하여 처음 2개의 아이템을 출력합니다.
슬라이싱에서 첫 번째 인덱스를 지정하지 않으면 기본값인 0부터 시작합니다.
print(my_pets[:2])
따라서 위 예제에서 [0:2]와 [:2]는 동일한 결과를 보여줍니다.
네거티브 슬라이스도 동일하게 첫 번째 인덱스가 생략되면 0부터 시작하는 것을 의미합니다.
my_pets[0:-1]
my_pets[:-1]
my_pets[0:-2]
마지막 인덱스를 생략한 경우 기본값은 리스트의 마지막 아이템을 의미합니다.
my_pets[1:]
my_pets[-2:]
첫 번째와 마지막 인덱스 모두 생략된 경우 기본값은 처음부터 마지막까지를 의미합니다.
my_pets[:]
인덱스 증가폭
인덱스 증가폭의 기본값은 1입니다.
[인덱스 시작: 인덱스 끝: 인덱스 증가 폭]의 형식
data.csv[;4]는 0부터 3까지 1씩 증가하므로 결과는 data입니다.
data.csv[-3:]는 네거티브 인덱스 -3부터 마지막 인덱스까지 1씩 증가하므로 결과는 csv입니다.
[start: end: 1]은 지정된 첫 번째, 마지막 인덱스에서 1씩 증가하면서 아이템을 가지고 오는 것입니다.
zero_six = [0, 1, 2, 3, 4, 5, 6]
zero_six[0:7]
zero_six[0:7:1]
[0:7]과 [0:7:1]은 인덱스 0부터 6까지 1씩 증가
zero_six[0:7:3]
zero_six[::3]
[0:7:3]과 [::3]은 0-부터 6까지 3씩 증가
인덱스 대신에 range 함수를 사용할 수 있습니다.
list(range(0, 7, 3))
네거티브 인덱스 증가폭
인덱스 증가폭이 네거티브이면 오른쪽에서 왼쪽으로 움직이게 됩니다.
인덱스 폭이 -1인 경우
zero_six[::-1]
[::-1]은 마지막 인덱스부터 첫 번째 인덱스까지 -1씩 증가합니다.
zero_six[2:0:-1]
[2:0:-1]은 세 번째 인덱스부터 두 번째 인덱스까지 -1씩 감소합니다.
zero_six[::-2]
[::-2]는 마지막 인덱스부터 첫 번째 인덱스까지 -2씩 증가합니다.
네거티브 인덱스 폭을 사용하려면 첫 번째 인덱스가 마지막 인덱스보다 항상 커야 합니다.
오늘은 파이썬에서 사용되는 인덱싱과 슬라이싱에 대해서 알아봤습니다.
'초보 코딩 배우기' 카테고리의 다른 글
파이썬 string 포멧 출력하기 (12) | 2021.05.24 |
---|---|
파이썬 모듈 (4) | 2021.05.18 |
파이썬 while loop (6) | 2021.05.10 |
파이썬 파일 입출력 (10) | 2021.05.03 |
파이썬 함수 (19) | 2021.04.19 |
파이썬 dictionary (14) | 2021.04.11 |
파이썬 for loop (6) | 2021.04.04 |
파이썬 set (8) | 2021.03.28 |
댓글