티스토리 뷰

#14 파이썬 chapter 14. for문

 

파이썬의 직관적인 특징을 가장 잘 대변해 주는 것이 바로 지금 배우게 될 for문 이다. while과 비슷한 반복문인 for문은 매우 유용하고 문장 구조가 한눈에 쏙 들어온다는 장점이 있다.

 

1. for문의 기본구조

 

for문의 기본구조는 아래와 같다.

 

for 변수 in 리스트(또는 튜플, 문자열):
    수행할 문장1
    수행할 문장2
    ...

 

리스트나 튜플 문자열의 첫 번째 요소부터 마지막 요소까지 차례로 변수에 대입되어 문장들을 수행한다.

 

1)  전형적인 for문

 

test_list = ['one', 'two', 'three']
for i in test_list:
    print(i)
    
one
two
three

 

위 리스트의 첫번째 요소인 one을 먼저 i 변수에 대입된 후 마지막 요소까지 이것을 반복한다.

 

2) 다양한 for문의 사용

 

a = [(1,2), (3,4), (5,6)]
for (first, last) in a:
    print(first + last)
    
3
7
11

 a 리스트의 요솟값이 튜플이기 떄문에 각각의 요소가 자동으로 (first, last) 변수에 대입된다.

 

3) for문의 응용

 

for문의 쓰임새를 알기 위해 다음을 가정해 보자.

 

' 5명의 학생이 시험을 보았는데 시험 점수가 60점이 넘으면 합격이고 그렇지 않으면 불합격이다. 합격인지 불합격인지 결과를 보여주시오.

 

marks = [90, 25, 67, 45, 80]
number = 0
for mark in marks:
    number = number + 1
    if mark >= 60:
        print('%d번 학생은 합격입니다.' % number)
    else:
        print('%d번 학생은 불합격입니다.' % number)

1번 학생은 합격입니다.
2번 학생은 불합격입니다.
3번 학생은 합격입니다.
4번 학생은 불합격입니다.
5번 학생은 합격입니다.

 

각각의 학생에게 번호를 붙여주기 위해 number 변수를 사용하였고 점수리스트 marks에서 차례로 점수를 꺼내어 mark에 대입하여 for문 안의 문장들을 수행한다.

 

2. for문과 continue문

 

while문에서 살펴본 continue문을 for문에서도 사용할 수 있다. 즉 for문 안의 문장을 수행하는 도중에 continue문을 만나면 for문의 처음으로 돌아가게 된다.

 

marks = [90, 25, 67, 45, 80]
number = 0 
for mark in marks:
    number = number + 1
    if mark < 60: continue
    print ("%d번 학생 축하합니다. 합격입니다." % number)

1번 학생 축하합니다. 합격입니다.
3번 학생 축하합니다. 합격입니다.
5번 학생 축하합니다. 합격입니다.

 

위 예제는 60점 이상인 사람에게는 축하메세지를 보내고 나머지 사람에게는 아무 메세지도 전하지 않는 프로그램이다.

점수가 60점 이하인 학생일 경우에는 mark < 60 이 참이 되어 continue문이 수행된다.

 

3. for문과 함께 자주 사용하는 range 함수

 

for문은 숫자 리스트를 자동으로 만들어 주는 range 함수와 함께 사용하는 경우가 많다. 다음은 range 함수의 간단한 사용법이다.

 

a = range(10)
a
range(0, 10)  <-- 0,1,2,3,4,5,6,7,8,9

 

range(10)은 0부터 10 미만의 숫자를 포함하는 range 객체를 만들어 준다.

시작 숫자와 끝 숫자를 지정하려면 range(시작 숫자, 끝 숫자) 형태를 사용하는데 이 때 끝 숫자는 포함하지 않는다.

 

1) range 함수의 예시 살펴보기

 

for와 range 함수를 사용하면 1부터 10까지 더하는 것을 다음과 같이 쉽게 구현할 수 있다.

 

add = 0
for i in range(1, 11):
    add = add + i
    print (add)

1
3
6
10
15
21
28
36
45
55

 

range(1,11)은 1부터 10까지 숫자를 데이터로 갖는 객체이다. 따라서 위 예에서 i변수에 리스트의 숫자가 1부터 10까지 하나씩 차례로 대입되면서 add = add + i 문장을 반복적으로 수행하고 add는 최종적으로 55가 된다.

 

또한 앞서 살펴본 '60점 이상이면 합격'이라는 문장도 range 함수를 사용해서 바꿀 수 있다.

 

marks = [90, 25, 67, 45, 80]
for number in range(len(marks)):
    if marks[number] < 60: continue
    print("%d번 학생 축하합니다. 합격입니다." % (number+1))

1번 학생 축하합니다. 합격입니다.
3번 학생 축하합니다. 합격입니다.
5번 학생 축하합니다. 합격입니다.

 

len 함수는 리스트 안의 요소 개수를 돌려주는 함수이다. 따라서 len(marks)는 5가 될 것이고 range(len(marks))는 range(5)가 될 것이다.

 

2) for와 range를 사용한 구구단

 

for i in range(2,10):
    for j in range(1,10):
        print (i*j, end=" ")
    print('')
    
2 4 6 8 10 12 14 16 18 
3 6 9 12 15 18 21 24 27 
4 8 12 16 20 24 28 32 36 
5 10 15 20 25 30 35 40 45 
6 12 18 24 30 36 42 48 54 
7 14 21 28 35 42 49 56 63 
8 16 24 32 40 48 56 64 72 
9 18 27 36 45 54 63 72 81 

 

위 예를 보면 for문을 2번 사용했다. 1번 for문에서 2부터 9까지 숫자를 range(2,10) 로 2번 for문에선 1부터 9까지 숫자를 range(1,10)을 사용하여 변수 i와 j 에 대입되었다. 그리고 그 다음문장 print(i*j)를 수행한다.

 

4. 리스트 내포 사용하기

 

리스트 안에 for문을 포함하는 리스트 내포를 사용하면 좀 더 편리하고 직관적인 프로그램을 만들 수 있다.

 

a = [1, 2, 3, 4]
result = []
for num in a:
    result.append(num*3)
    print(result)
[3]
[3, 6]
[3, 6, 9]
[3, 6, 9, 12]        

 

위 예제는 a 리스트의 각 항목에 3을 곱한 결과를 result 리스트에 담는 예제이다.

 

a = [1, 2, 3, 4]
result = []
for num in a:
    result.append(num*3)
    print(result)

[3]
[3, 6]
[3, 6, 9]
[3, 6, 9, 12]

 

위 예제는 a 리스트의 각 항목에 3을 곱한 결과를 result 리스트에 담는 예제이다

 

이것을 리스트 내포를 사용하면 다음과 같이 간단히 해결할 수 있다.

 

a = [1, 2, 3, 4]
result = [num * 3 for num in a]
print (result)

[3, 6, 9, 12]

 

만약 [1, 2, 3 , 4] 중에서 짝수에만 3을 곱하여 담고 싶다면 다음과 같이 리스트 내포 안에 'if 조건'을 사용할 수 있다.

 

a = [1, 2, 3, 4]
result = [num * 3 for num in a if num % 2 == 0]
print(result)

[6, 12]

 

조금 복잡하지만 for문을 2개 이상 사용하는 것도 가능하다.

 

[표현식 for 항목1 in 반복 가능 객체1 if 조건1
        for 항목2 in 반복 가능 객체2 if 조건2
        ...
        for 항목n in 반복 가능 객체n if 조건n

 

만약 구구단의 모든 결과를 리스트에 담고 싶다면 리스트 내포를 사용하여 다음과 같이 간단하게 구현할 수 있다.

 

result = [x*y for x in range(2,10)
          for y in range(1,10)]
print(result)

[2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18, 21, 24, 27, 4, 8, 12, 16, 20,
24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45, 6, 12, 18, 24, 30, 36, 42, 48, 54,
7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 24, 32, 40, 48, 56, 64, 72, 9, 18, 27, 36,
45, 54, 63, 72, 81]

 

while문과 for문을 보면서 2가지가 아주 비슷하다는 느낌을 받았을 것이다. 실제로 for문을 사용한 부분을 while문으로 바꾸는 경우도 많고 그 반대의 경우로 사용할 수 있는 경우도 많다.

 

 

출처 :  점프 투 파이썬

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함