본문 바로가기
언어/Python

[Python 기본 공부정리] 5-3. 제어문-반복문(for)

by 민-Zero 2019. 12. 23.

공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다. 

틀린 부분에 대한 지적은 감사합니다.

반복문 while 은 조건식이 참이라면 횟수의 제한 없이 얼마든지 반복될 수 있었다. for문은 조건식 대신 iterable(반복가능)한 객체와 함께 사용한다.

 

1. for in 문

문법)

for 변수 in iterable객체(리스트, 튜플, 문자열..):

    실행 코드

 

반복문을 실행하게 되면 해당 변수에 iterable객체의 첫 번째 요소부터 마지막 요소까지 차례로 들어가게 되며 코드가 반복된다. 기본적인 예시를 통해 확인해 보면

i 변수에 차례로 리스트의 요소가 대입되면서 실행 코드가 진행되는 것을 확인할 수 있다. 

 

그렇다고 for문을 진행할때 마다 원하는 횟수만큼의 개수를 지닌 리스트나 튜플 등을 생성해야 하는 것은 아니다. for문과 함께 자주 쓰이는 함수로 숫자의 범위를 나타내는 객체를 자동 생성해주는 range() 함수가 존재한다.

range(start, end, step)로 사용 가능하며 start는 시작 숫자 end는 종료 숫자 step은 숫자가 몇씩 증가할 것인지를 결정한다. 객체가 생성될 때 end에 설정한 종료 숫자 바로 앞 숫자까지만 범위에 포함되고 start와 step은 생략 가능하며 start생략 시 0부터 시작하고 step생략 시 1씩 증가한다. range객체를 리스트로 변환하여 확인해 보면

1번 라인은 start와 step을 생략하여 디폴트 시작숫자 0부터 end 바로 앞 숫자인 4까지 디폴트 step인 1씩 증가함을 확인할 수 있다.

2번 라인은 step만 생략하였으므로 1부터 5바로앞숫자인 4까지 1씩 증가하는 리스트가 생성되었음을 확인할 수 있다.

3번 라인은 1부터 11바로앞 숫자인 10까지 2씩 증가시킨 범위이므로 10 이하 홀수만 가지는 리스트가 생성되었다.

4번 라인은 11부터 0바로앞 숫자인 1까지 -1씩 증가시키므로 숫자를 역순으로 출력할 수 있다.

5번 라인은 step이 기본값 1이므로 5부터 1은 잘못된 범위이므로 빈리스트 생성을 확인할 수 있다.

따라서 range함수를 이용하면 좀더 유용하게 for문을 사용할 수 있다.

 

2. for문 응용

파이썬에서 for문은 iterable객체를 이용하여 반복을 결정하므로 다양하게 응용이 가능하다.

이 예시는 iterable객체 리스트안의 요소가 tuple로 생성되어 있으므로 for문의 변수를 똑같이 튜플로 생성해 주었다. 파이썬이 변수의 타입을 자동으로 결정해주어서 많이 신경 쓸 필요는 없지만 이처럼 원소 개수까지 자동으로 결정해 주지는 못하므로 기본적인 형태는 맞춰주어야 한다.

 

또한 앞서 while문에서 정리한 continue와 break또한 사용 가능하며 동일한 기능을 수행한다.

간단히 다시 정리하면 continue를 만나면 코드 진행을 멈추고 다음 반복을 진행하고

break를 만나면 반복문을 강제로 종료하게 된다.

 

조금 생소한 iterable객체로 딕셔너리를 정리 했었다. 딕셔너리는 객체의 한 요소가 key와 value 두 개로 이루어져 있어 for문에서 사용하려면 딕셔너리 관련 메소드의 도움을 받아야 한다.

지금까지 사용한것 처럼 for문을 사용할 경우 key값만 for문에서 사용할 수 있는 것을 확인할 수 있다. 그러므로 value를 사용하여 반복을 진행하고 싶다면 values() 메소드를 이용하면 된다.

 

key 값과 value값을 동시에 사용하려면 items()메소드를 이용해야 한다.

3. 리스트 내포(list comprehension)

리스트 내포라는 기법은 리스트의 요소를 생성할때 for문과 if문 등을 한 라인에 작성하여 코드를 좀 더 직관적으로 만들어 주고 실행 속도 또한 높여주는 방법이다.

문법)

리스트명 = [변수 표현식 for 변수 in iterable객체]

 

for에 사용한 변수를 사용자가 원하는대로 변수 표현식을 설정하면 해당 표현식의 결과가 리스트의 요소로 들어가게 된다. 예시를 통해 확인해 보면

이 예시는 10 이하의 자연수중 짝수에 2를 곱한 결과를 result에 추가해주는 코드이다. 리스트 내포 기법을 사용한다면 이 코드를 간단하게 작성 가능하다.

i*2라는 표현식의 결과가 i가 가진 값을 이용하여 리스트의 요소로 추가되어 동일한 결과를 보여준다.

또한 for 뒤에 if를 추가함으로써 조건을 사용하여 요소를 추가할 수 있다. 또한 중첩된 for문 또한 가능하다.

 

for문을 중첩하여 사용해서 구구단 2단의 결과를 리스트의 요소로 사용한 모습이다. 왼쪽에 사용한 for문부터 일반적으로 사용하였을 때 바깥쪽에 위치한 for문이라고 생각하면 된다. 위의 코드를 리스트 내포 기법을 사용하지 않고 작성한다면 다음과 같다. 

 

댓글