반응형

지난 포스팅에서는 주석과 print 함수를 사용하여 출력 그리고 변수, 그것들을 담을 수 있는 리스트에 대해 배웠습니다.

 

오늘은 리스트 심화과정 중 첫시간으로 인덱싱과 슬라이싱에 대해 배워보도록 하겠습니다.

 

먼저, 리스트 심화과정에 들어가기 앞서 리스트를 복습해보겠습니다.

 

학생 4명의 키를 저장하고 싶을 때 파이썬에서는 어떻게 해야 할까요?

 

height_1 = 167

height_2 = 180

height_3 = 174

height_4 = 162

 

이렇게 변수를 4개 만들어서 저장을 하면 됩니다.

하지만, 위와 같이 4개의 변수를 만들어 사용하는 것은 가능한 방법이나 비효율적입니다.

따라서 우리는 리스트라는 것을 사용할 것입니다. 리스트를 사용하면,

 

(리스트 사용 예시)

heights = [167, 180, 174, 162]

 

이렇게 4줄짜리 코드를 1줄로 축약시킬 수 있습니다.

 

자, 그러면 리스트 예제 몇가지를 더 보고 특징부터 알려드리겠습니다.

 

example_1 = ["안녕하세요", "korea", 4823, 130.22, (41, 33)]

example_2 = [33, "33", { "name" : "hacker", "age" : 22 }]

 

리스트안의 값들을 잘 보면, 어떤 것은 큰 따옴표로 감싸져있고 어떤 것은 그냥 적혀있습니다. 또한 소괄호, 중괄호로 묶인 것도 있습니다.

 

특징을 정리하자면,

1. 리스트안에서도 문자열은 큰 따옴표 ("")로 감싼다.

2. 숫자형(정수형 / 실수형)은 따옴표를 생략하고 적는다.

 

위 특징은 기억하고 가야될 기초적인 부분입니다.

 

그리고, 소괄호로 묶인 (41, 23) 이 부분은 튜플이라는 것이고, 그 아래에 있는 { "name" : "hacker", "age" : 22 } 이 부분은 딕셔너리 입니다.

그렇다면 리스트 안에는 일반적으로 문자열, 정수형, 실수형 외에도 튜플 및 딕셔너리도 올 수 있다는 점을 상기하면 됩니다.

 

리스트를 이제 다양한 방식으로 다룰 수 있는데 그중에 인덱싱과 슬라이싱에 대해 알려드리겠습니다.

 

참고로 프로그래밍은 학교 시험이 아니기 때문에 용어를 기억할 필요는 없습니다. 단지 코드를 하나하나 직접 타이핑 해보면서 어떻게 사용하는지 이해를 하고 기억해서 다음에 필요할 때 쓸 수 있으면 됩니다.

 

- 인덱싱

인덱싱은 리스트의 값들중에서 특정한 번째에 있는 값을 지정하는 것입니다.

 

- 슬라이싱

슬라이싱은 마우스 드래그와 비슷합니다. 리스트안에서 특정 범위만큼의 값들을 지정합니다.

 

글로 보면 이해하기 어려우니 바로, 코드로 직접 실습하며 이해해보도록 하겠습니다.

 

list = ['안', '녕', '하', '세', '요']

print(list)

위 코드를 실행시켜보시면 ['안', '녕', '하', '세', '요'] 라고 출력이 됩니다.

 

print(list[3])

print(list[4])

print(list[0])

 

위코드를 하나하나 직접 입력해보세요.

 

 

위처럼 출력이 될 것입니다.

이렇게 하나하나 값을 특정해서 뽑아오는 것을 인덱싱이라고 합니다.

 

그러면 또 다른 코드를 한번 실습해 보겠습니다.

 

print(list[0:2])

# ['안', '녕']

print(list[1:4])

# ['녕', '하', '세']

print(list[1:])

# ['녕', '하', '세', '요']

print(list[-2:])

# ['세', '요']

 

위처럼 뭔가 마우스로 드래그하듯이 특정 범위만큼 값을 지정하는 것을 슬라이싱 이라고 합니다.

 

인덱싱과 슬라이싱을 활용하기 위해서는 아래의 표를 먼저 이해해야합니다.

0 1 2 3 4

 

안녕하세요 밑에 있는 각각의 숫자들은 index 라고 불리는 것입니다. 쉽게 이해하자면 몇번째인지 나타내는 건데 한가지만 알면됩니다.

 

현실에서는 흔히 1, 2, 3, 4(하나 둘 셋 넷) 이렇게 셉니다. 하지만 컴퓨터는 무조건 첫 번째가 0부터 시작입니다. 이는 파이썬 외에 모든 프로그래밍 언어에서 다 통일되는 내용이니 꼭 기억하셔야 합니다.

 

자 그러면 안녕하세요에서 녕은 몇 번째일까요? 두번째죠? 그러면 컴퓨터는 0부터 세니까 0, 1 . 인덱스값은 1입니다.

 

그러면 이를 활용해 인덱싱으로 녕을 뽑으려면 list[1] 이렇게 사용해주면 됩니다.

 

따라서 인덱싱은 '리스트명[인덱스값]' 이렇게 사용한다고 정리할 수 있습니다.

 

슬라이싱에서 사용했던 코드를 하나하나 분석해 보겠습니다.

 

print(list[0:2])

# ['안', '녕']

 

슬라이싱도 인덱싱처럼 '리스트명[인덱스값:인덱스값'] 이렇게 생겼습니다.

리스트에서 [0:2] 이 범위에 있는 요소들을 적어보면, ['안', '녕', '하'] 입니다.

그런데 실제로 출력은 ['안', '녕']만 되었습니다. 한가지 더 예를 보겠습니다.

 

print(list[1:4])

# ['녕', '하', '세']

 

범위는 [1:4] 까지 입니다. 이 범위의 요소를 적어보면, ['녕', '하', '세', '요'] 입니다.

하지만 이번에도 출력은 ['녕', '하', '세']만 되었습니다.

코드가 문제일까요? 그렇지 않습니다 python에서 리스트 슬라이싱은 '리스트명[시작하는 index: 끝나는 인덱스+1]' 이런식으로 애초에 만들어 졌기 때문입니다. 그러면 우리는 그거를 그대로 받아드리고 써야합니다.

기억해야할 것은 만약 인덱스 범위 1~7까지를 슬라이싱하고 싶으면 리스트명[1:8] 이렇게 써줘야한다는 사실을 기억해야하는 것입니다.

 

그 외에도,

print(list[1:])

# ['녕', '하', '세', '요']

이코드를 보면 끝나는 인덱스 범위값이 공란입니다. 하지만 코드는 실행이 잘 됩니다. 이유는 따로 지정해주지않으면 마지막인덱스까지 지정이 되기 때문입니다.

 

print(list[-2:])

# ['세', '요']

이코드는 뭘까요?

인덱스값 마지막에서부터 마지막 전의 인덱스값을 가진 값까지 지정하는 것입니다.

인덱싱으로 확인해보면 print(list[-1]) >> 요 가 출력됩니다.

-로 인덱스를 지정하면 맨 마지막값은 -0이아닌, -1부터 -2, -3 이렇게 값이 줄어든다는 것을 알 수 있습니다.

 

인덱싱과 슬라이싱은 여러번 반복하면서 익히면 쉽게 쓸 수 있으니 임의의 리스트를 하나 만들고 여러번 값들을 변경하며 실습해보시길 바랍니다.