본문 바로가기

Language/Python

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

리스트 인덱싱과 슬라이싱에 대해 자세히 알아볼게요.

 

인덱싱(Indexing)

 

먼저 인덱싱은 리스트 안에 있는 값을 꺼낼 때 사용해요.

‘리스트 자료형’에서 설명한 것처럼 0부터 시작하는 인덱스 번호를 사용하는데요.

 

my_list = [1, 2, 3, 4, 5]
print(my_list[1])
>> (출력) 2

print(my_list[4])
>> (출력) 5

print(my_list[-1])
>> (출력) 5

 

my_list에서 숫자 2를 꺼내기 위해 my_list[1] 이라고 작성할 수 있어요.

그리고 숫자 5를 꺼내기 위해 my_list[4]라고 작성할 수도 있지만

마지막 위치를 의미하는 -1을 인덱스 번호로 사용해도 똑같이 나와요.

즉 my_list[-1]도 숫자 5를 반환해주죠.

 

다중리스트에서 인덱싱 사용하기

 

그런데 리스트 안에 또 리스트가 들어가있으면 어떻게 꺼낼까요?

 

my_list_2 = [1, 2, 3, 4, 5, ["홍길동", "한국인", "개발자"]]
my_list_3 = [1, 2, 3, 4, 5, ["홍길동", "한국인", "개발자"], ["대한민국", ["서울", "대전"]]]

 

이렇게 리스트 안에 리스트를 넣는 경우가 있는데요.

my_list_2 처럼 리스트 안에 리스트가 들어가 있는 것을 이중리스트라고 해요.

my_list_3은 리스트 안에 리스트가 있는데 그 안에 또 리스트가 있죠? 이것을 삼중리스트라고 해요.

다른 언어에서는 2차원 배열, 3차원 배열이라고 불려요.

 

그럼 my_list_2에서 ‘홍길동’이라는 값을 꺼내고 싶어요.

마찬가지로 my_list_3에서는 ‘서울’이라는 값을 꺼내고 싶은데 어떻게 할까요?

소스코드를 통해 알아볼게요.

 

# my_list_2에서 '홍길동'이라는 값 꺼내기
print(my_list_2[5][0])
>> (출력) 홍길동

# my_list_3에서 '서울'이라는 값 꺼내기
print(my_list_3[6][1][0])
>> (출력) 서울

 

먼저 my_list_2부터 설명해줄게요.

 

인덱스 번호 0 1 2 3 4 5
1 2 3 4 5 ["홍길동", "한국인", "개발자"]

 

my_list_2의 구조를 보면 인덱스가 5번인 곳에 ["홍길동", "한국인", "개발자"]이라는 리스트가 있네요.

“홍길동”이라는 값을 꺼내기 위해 먼저 my_list_2[5] 값을 꺼내줄게요.

 

자, my_list_2[5] = ["홍길동", "한국인", "개발자"]이에요.

그럼 홍길동은 몇 번째 인덱스 번호에 값이 저장되어 있죠?

맞아요. 0번째 인덱스에 값이 저장되어 있어요.

그럼 이제 my_list_2[5]에서 [0]번째 인덱스를 꺼내달라고 작성했더니

my_list_2[5][0] 이렇게 되었네요.

 

my_list_3도 마찬가지에요.

먼저 “서울”이라는 데이터는 my_list_3의 6번 인덱스에 있는 ["대한민국", ["서울", "대전"]]에 들어있죠?

my_list_3[6]에서 “서울”은 어디에 있죠?

맞아요. my_list_3[6]에서 1번째 인덱스에 [”서울”, “대전”]이라는 리스트 속에 있네요.

그럼 my_list_3[6][1]에서 “서울”은 0번째 인덱스에 있으니까 my_list_3[6][1][0]이라고 작성하면

“서울”을 꺼낼 수 있어요.

 

이렇게 하나씩 찾아가면 데이터를 꺼낼 수 있답니다!

 

인덱싱을 통해 사칙연산 하기

 

인덱싱을 통해 사칙연산도 할 수 있어요.

my_list 안에 있는 1과 2를 더해볼까요?

 

my_list = [1, 2, 3, 4, 5, "6"]
# sum에 1 + 2 결과 저장하기
sum =  my_list[0] + my_list[1]
print(sum)
>> (출력) 3

 

덧셈뿐만 아니라 뺄셈, 곱셈, 나눗셈도 할 수 있어요.

대신에 한가지 조심할 점은!

숫자와 문자는 같은 자료형이 아니기 때문에 사칙연산을 할 수 없어요.

둘 중 한가지 타입으로 형변환을 한 다음 계산해야되는 점! 꼭 알아두세요.

 

리스트 슬라이싱

 

리스트의 슬라이싱은 데이터를 나눈다는 의미에요.

문자열에서 사용하는 슬라이싱이랑 똑같은 방법으로 사용할 수 있어요.

 

my_list_1 = [1, 2, 3, 4, 5]
my_list_2 = [1, 2, 3, 4, 5, ["홍길동", "한국인", "개발자"]]

 

my_list_1에서 2, 3, 4가 저장된 리스트를 출력하고 my_list_2에서는 “홍길동”, “한국인”이 저장된 리스트를 출력해볼게요.

 

# my_list_1에서 2, 3, 4가 저장된 리스트 출력하기
print(my_list_1[1:4])
>> (출력) [2, 3, 4]

# my_list_2에서 "홍길동", "한국인"이 저장된 리스트 출력하기
print(my_list_2[5][0:2])
>> (출력) ["홍길동", "한국인"]

print(my_list_2[5][:2])
>> (출력) ["홍길동", "한국인"]

 

리스트 안에서 일부 데이터만 출력(추출)하고 싶을 때 슬라이싱을 사용하면 편하겠죠?

아! 마지막 출력문을 보면 [:2]라고 작성했어요.

이건 리스트의 맨 앞에 요소부터 index 2번 전까지 출력해달라는 의미에요.

결과를 보면 알겠지만 [0:2]와 똑같은 의미라는거 기억해두세요!