이해하기 쉬운 Python 3.6 - 5회차

2017. 5. 6. 19:29언어별 정리 자료/Python

이해하기 쉬운 Python 3.6 - 5회차



저번 시간에는 조건문과 반복문에 대해서 알아보았습니다.


조건문과 반복문 모두 조건이 참일 경우 그 Code block 을 수행하며, 거짓일 경우 수행하지 않고 바로 넘어가는 특성이 있습니다.


둘 모두 조건을 여러 개 선택 가능하다고 까지 했습니다.


그러나 이런 조건문과 반복문, 변수들로만 가지고는 효율적인 프로그래밍을 할 수 없습니다.


오늘은 이러한 효율을 늘리는 방식에 대해서 진행 해 보도록 하겠습니다.



List

List 란 Python 의 변수의 한 종류입니다. 

이는 검색 가능한 ( 이를 색인된, Indexed 라고 합니다. ) 저장 요소들을 가지는 변수입니다.


예를 들어 우리가 사용자의 입력 20개를 한 번에 받아서 그 20개를 작은 크기의 숫자부터 출력하는 프로그램을 만든다고 가정 해 봅시다.


이러한 경우, 지금까지 배운 방식으로 우리는 다음과 같이 사용자의 입력을 받을 수 있습니다.



또한 이렇게 받은 입력으로 계속해서 가장 작은 값을 저장하며 특정 절차에 따라 작은 크기의 숫자부터 출력하는 프로그램을 만들 수 있습니다.



그러나 이러한 방식은 반복문을 배운 지금 매우 비효율적인 코드라는 것을 알 수 있습니다.


또한 변수가 20개가 아니라 200, 2,000, 20,000개가 되면서 이러한 코드는 더 이상 진행이 불가능 해 집니다.



따라서 이럴때 만들어 주는 것이 바로 List 입니다.

List의 경우는 C나 JAVA의 Array 같은 것과 비슷하다고 생각하시면 됩니다.



List의 정의

List 는 [] ( Square Brackets ) 로 둘러쌓여 있는 값들의 집합으로 정의됩니다.


  • 비어있는 List를 처음에 정의 할 수도,
  • 몇 개가 들어가 있는 List를 정의 할 수도, 
  • 심지어는 List 안에 List 가 들어가고 또 List가 그 안에 들어가고 하는 모습도 

정의 가능합니다.



이 때, 이러한 List를 불러오기 위해서는 List의 이름 뒤에 [0] 과 같이 대괄호 안에 몇 번째 List 의 요소인지를 써 주어야 합니다.


주의해야 할 점은 List의 맨 처음을 불러오기 위해서는 0 을 써 주어야 한다는 것 입니다. 다시 말해 [1] 부터 시작하는 것이 아닌 [0] 부터 시작하는 것 입니다.


또한, 이러한 List 들은 print() 함수로 바로 출력 가능한 특성을 가지고 있습니다.



List의 범위 바깥을 가리키게 되면 ( 이를 Indexing 한다고 합니다. ) Error 가 발생합니다.

따라서 List의 범위를 넘어 가리키는 행위를 조심 해야 합니다.



String 또한 List와 비슷한 성질을 가지고 있습니다. String 도 [2] 와 같이 Indexing이 가능한 성질을 가지고 있습니다.

String의 indexing 한 결과는 한 글자로 나타나게 됩니다.


String 또한 마찬가지로 범위 바깥을 Indexing 하면 Error 가 발생합니다.


그러나 String 은 list와 다르게 이미 한 번 정해진 index( 번째 )의 글자는 바꿀 수 없습니다.




Python 에서는 String에서 연산을 지원 한 것 처럼, List에서의 연산 또한 지원합니다.

List 는 +, * 에서 list + list, list * int 로 정의가 되어있습니다. 사용법은 아래 code 와 같습니다.






in 연산자

list 에서는 in 과 같은 예약어도 사용 가능합니다.

이름에서도 알 수 있듯 " ~가 어떤 list 내부에 있는가?" 를 나타내는 일종의 조건 연산자입니다.


조건 연산자이기 때문에 반환형은 boolean, 즉 True / False 의 값을 가지게 됩니다.



또한 in 연산자는 String의 Sub String을 찾는 데에도 쓰입니다.







그 외의 함수

in 말고도 Python 에서는 List만의 특별한 함수를 지원합니다.


  • append : list.append( elements ) 의 형태로 사용합니다. list의 맨 끝에 elements 라는 요소를 추가합니다.


  • len : len(list)의 형태로 사용합니다. list 의 길이를 반환합니다.


  • insert : list.insert( 번째 ( == index ), element ) 로 append 와 비슷하게 어느 특정 위치에 element 를 추가한다.

  • index : list.index( element ) 로 사용한다. element 가 어디에 존재하는지를 찾아낸다. element 가 여러개 있다면 index 가 가장 작은 것의 index 를 반환한다.

  • list 의 삭제는 del 을 이용해서 진행한다. del list[index] 와 같이 사용한다.

  • max, min : max(list), min(list) 와 같이 사용한다. list 에서 가장 크거나 작은 숫자 혹은 비교 가능한 것을 반환한다.


  • count : list.count(object) 와 같이 사용한다. object 와 똑같은 것이 얼마나 나오는지 반환 한다.


  • reverse : list.reverse() 와 같이 사용하며, 함수 이름에서도 알 수 있듯 list를 거꾸로 뒤집는다.





range()

Python 에서 반복문을 수행 할 때, 혹은 어떤 일정한 수열을 만들 때 자주 쓰는 함수가 바로 range() 함수 입니다.


우리는 평소에 "1 ~ 100 까지 숫자들", "20 ~ 37 까지의 홀수들" 같은 일정한 차이의 숫자 List ( 일종의 등차수열 ) 을 필요로 할 때가 많습니다.


이러한 경우를 대비해 Python 에서는 함수를 하나 만들어 쓸 수 있게 해 주었습니다.



range 는 하나의 변수 형태로 저장 가능합니다.

그러나 +, - 같은 사칙 연산은 불가능합니다. print 로 출력을 해도 range(0, 5) 같은 것만 나오게 됩니다.


range는 ( 처음 시작할 수, 끝날 수, 다음 값을 구할 때 더해질 수) 와 같이 사용합니다.

즉, range(a, b, c) 는

a, a+c, a+2 * c, a+3 * c, ...  

같이 진행되어 b 보다 작을 때 까지 진행됩니다.


만약 c 가 음수라면 b 보다 클 때 까지 진행됩니다.


a 가 b 보다 큰데 c 가 양수라면 아무것도 진행되지 않으며, a 가 b 보다 작고 c 가 음수 일 때에도 아무것도 진행되지 않습니다.


a 는 생략된다면 0으로 지정됩니다.


c 는 생략된다면 1로 지정됩니다.







for 반복문

while 반복문은 "어떤 조건이 참일 때, 계속해서 반복을 멈추지 않고 해라." 의 의미를 가지는 반복문입니다.


이는 어떤 상황에 따라 특정 횟수의 제한이 없이 연속적인 작업을 해야 할 때 효율이 좋습니다.


그러나 어떤 상황의 일정 횟수의 작업 이후 반복을 멈추어야 할 때, while 문에서는 번거로운 count 변수를 설정하고 등의 작업을 해 주어야 합니다.




이는 while 문의 조건 체크의 길이를 늘릴 뿐만 아니라 비교해야 할 조건의 갯수가 늘어나게 되므로 코드의 속도가 줄어들게 됩니다.


따라서 Python 에서는 이러한 반복문을 for 반복문의 구현으로 해결하였습니다.



for 는 다음과 같은 형태를 가집니다.

for 변수 in List / range :

    statements...

    statements...

    statements...

for 반복문 역시도 code block 이 for 문의 범위를 결정합니다. 들여쓰기( Indentation ) 에 주의합시다.



과 같이 편리하게 List 를 탐색 가능하기도 합니다.


for i in range(0, 10, 2) : 같이 range 를 바로 사용 할 수도 있습니다.








이번 시간에는 for 와 list, 또한 그에 관련된 함수와 in 연산자에 대해 배웠습니다.

이러한 사항들은 Python 개발에 소소하게 많은 도움이 되니 잘 기억 해 두도록 합시다.