for문에 대한 활용법, indexing 방법, 2중 for문 등에 대해 정리합니다.

개요


  • python의 주요 기능인 반복문의 개념과 활용방법에 대한 내용을 정리합니다.

for 반복문

  • 리스트, 문자열 등등 순회 가능한 객체를 순회하면서 값을 처리할 때 사용

  • 아래와 같은 문법으로 사용

  • 여기서 i는 매번 수행 될 때마다, a의 아이템으로 순차적으로 변경 됨 (i는 임의의 문자로 자유롭게 변경가능)

  • 모든 아이템이 순회되면 for 블록 종료

1
2
3
4
5
6
7
a = [1, 2, 4, 3, 5]

for i in a:

    print (i, i * 2)

즉, for 하나씩 꺼내올 때 변수 in [꺼내올 집합] 의 형태로 사용된다.

1
2
3
4
a = [1, 2, 4, 3, 5]
for i in a:
    print (i, i * 2) # a의 i번째 값을 순차적으로 입력받아서 작용
print('end!')
1 2
2 4
4 8
3 6
5 10
end!
1
2
3
4
a = [1, 2, 4, 3, 5]
for number in a:
    print(number) 
print('There is no difference between i and numbers in for statement')
1
2
4
3
5
There is no difference between i and numbers in for statement

문자열의 아이템 출력하기

  • 문자열의 경우 순회 가능, 리스트와 유사하게 순회 가능

  • 문자열 하나가 list의 index 1개와 동일

1
2
for x in 'hello world':
    print(x)
h
e
l
l
o

w
o
r
l
d
1
2
3
a = 'hello world'
for character in a:
    print(character)
h
e
l
l
o

w
o
r
l
d

리스트 아이템 출력하기

1
2
3
4
5
6
a = [1, 10, 3, 4, 5]
for num in a:
    if num % 2 == 0: # num을 2로 나눈 몫이 0 -> 짝수이면
        print(num/2)
    else: # 짝수가 아니면 = 홀수이면
        print(num+1)
2
5.0
4
2.0
6

dict의 아이템 출력하기

  • dictionary의 경우 기본적으로 순회 하게 되면 key값을 참조

  • keys()함수를 이용하여 key 값만 순회 가능

  • values()함수를 이용하여 value 값만 순회 가능

  • items()함수를 이용하여 tuple형태로 key, value 순회 가능

key() 함수로 순회

key값과 dict의 indexing을 활용해 key와 value 모두 출력하기

1
2
3
4
a = {'korea': 'seoul', 'japan': 'tokyo', 'canada': 'ottawa'}

for key in a:
    print(key, a[key])
korea seoul
japan tokyo
canada ottawa

key값만 출력하기

1
2
for key in a:
    print(key)
korea
japan
canada

value() 함수로 순회

1
2
for value in a.values():
    print(value)
seoul
tokyo
ottawa

items()함수로 순회

  • 실질적으로 가장 자주 쓰이는 방식
1
a.items()
dict_items([('korea', 'seoul'), ('japan', 'tokyo'), ('canada', 'ottawa')])
1
list(a.items()) # 튜플을 원소로 하는 list로 변경 -> 각각의 item이 tuple
[('korea', 'seoul'), ('japan', 'tokyo'), ('canada', 'ottawa')]
1
2
3
4
# tuple은 ,를 활용해 여러개의 값을 동시에 가져 올 수 있다.

for key, value in a.items():
    print(key, value)
korea seoul
japan tokyo
canada ottawa

for에서 index 사용하기

  • 기본적으로 for에 리스트를 순회하는 경우, 값만 추출 함

  • 아래와 같은 코드로 인덱스와 값 모두 사용 가능(enumerate 함수 이용)

1
2
3
4
5
6
7
a = [1, 2, 4, 3, 5]

for i, val in enumerate(a):

    print i, val

1
2
3
a = [1, 2, 3, 4, 5]
for index, num in enumerate(a):
        print(index, num)
0 1
1 2
2 3
3 4
4 5

조건문을 적용해서도 활용할 수 있다.

index가 3보다 큰 경우만 출력!

1
2
3
4
a = [1, 2, 3, 4, 5]
for index, num in enumerate(a):
    if index > 3:
        print(index, num)
4 5

break

  • while문과 마찬가지로 for의 경우에도 특정 조건일 때, loop 종료가 가능
1
2
3
4
5
6
a = [100, 90, 80, 70, 60, 50]
for num in a:
    if num < 80:
        break
        
    print(num)
100
90
80

continue

  • while문과 마찬가지로 for의 경우에도 해당 아이템을 건너 뛰고 싶을 때 사용
1
2
3
4
5
a = [100, 90, 80, 70, 60, 50]
for num in a:
    if num >= 60 and num <= 70:
        continue #건너 뛴다
    print(num)
100
90
80
50

loop 중첩

  • 반복문의 경우에도 중첩하여 사용 가능

  • 중첩이라는 것은 반복문 블록의 코드안에 또 반복문의 코드가 작성되는 것을 의미

  • 이런 경우, 내부 루프는 외부 루프가 수행되는 만큼 반복 수행 됨

  • 또한 중첩의 경우 무한히 가능

1
2
3
4
5
6
7
8
9
a = [1, 2, 4]

for i in a:

    for j in a:

        print i * j

1
2
3
4
5
a = [1, 2, 4]
for i in a:
    for j in a: # 처음에 i가 1일때는 j도 1
        print(i * j) # 이 print문이 실행된 후에는 j로 이동
        # j가 1,2,4가 모두 입력되서 종료되면 -> 위의 for문으로 이동
1
2
4
2
4
8
4
8
16

위의 이중 for 문은 [i in a의 경우의수 x j in a의 경우의 수 ] 만큼 실행된다.

1) [i가 1]일때 -> for j~ 이하의 for문이 실행된다.(j in a가 완료 될때까지 반복) -> i =1, j=1 // i * j = 1

2) i는 계속 1, j가 2인 경우가 실행 -> i =1, j =2 이므로 i*j = 2

3) i는 계속 1, j가 4인 경우가 실행 -> i =1, j =4 이므로 i*j = 4

4) j in a 가 모두 종료 되었으므로 -> [i = 2 경우]의 [j in a]가 실행 -> 1)~3) 처럼 반복 (단 i는 1이 아닌 2)

위와 같은 방식으으로 [i in a의 경우의수 x j in a의 경우의 수 ] 즉, 9번 for문이 실행된다.

for 문을 활용한 다양한 예시

구구단 출력하기

2 * 1 = 2

2 * 2 = 4

2 * 3 = 6

2 * 9 = 18

3 * 1 = 3

..

3 * 9 = 27

9 * 1 = 9

9 * 9 = 81

1
2
3
4
5
6
x = [2, 3, 4, 5, 6, 7, 8, 9]
y = [1, 2, 3, 4, 5, 6, 7, 8, 9]

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

collection의 길이

  • len() 내장함수로 계산 가능

  • 내장함수란 파이썬 내부에 구현되어 있어서, import하지 않고도 사용 가능한 함수를 의미

  • abs, len, type, range 등이 있음 (과정 진행하면서 필요할 때마다 다룰 예정)

1
2
a = [1, 2, 3, 4, 5, 1]
len('hello world')
11

range 함수

  • 리스트를 쉽게 만들 수 있는 내장함수

  • 주어진 값에 따라 다양한 결과를 반환

1
2
3
4
5
6
7
range(10)       -> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

range(2, 10)    -> [2, 3, 4, 5, 6, 7, 8, 9] 

range(2, 10, 3) -> [2, 5, 8] 

1 - 100까지의 리스트 생성하기

1
list(range(101))
[0,
 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,
 31,
 32,
 33,
 34,
 35,
 36,
 37,
 38,
 39,
 40,
 41,
 42,
 43,
 44,
 45,
 46,
 47,
 48,
 49,
 50,
 51,
 52,
 53,
 54,
 55,
 56,
 57,
 58,
 59,
 60,
 61,
 62,
 63,
 64,
 65,
 66,
 67,
 68,
 69,
 70,
 71,
 72,
 73,
 74,
 75,
 76,
 77,
 78,
 79,
 80,
 81,
 82,
 83,
 84,
 85,
 86,
 87,
 88,
 89,
 90,
 91,
 92,
 93,
 94,
 95,
 96,
 97,
 98,
 99,
 100]
1
2
a = list(range(1, 201))
print(a)
[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, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200]
1
list(range(1, 101, 5))
[1, 6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76, 81, 86, 91, 96]

1부터 100사이의 5의 배수만을 갖는 리스트를 생성하기

1
list(range(5, 101, 5))
[5,
 10,
 15,
 20,
 25,
 30,
 35,
 40,
 45,
 50,
 55,
 60,
 65,
 70,
 75,
 80,
 85,
 90,
 95,
 100]

if & for 활용 예시

  1. 구구단을 2 - 9단까지 출력

  2. 1 - 100까지 정수 중 2의 배수 또는 11의 배수를 모두 출력

  3. a = [22, 1, 3, 4, 7, 98, 21, 55, 87, 99, 19, 20, 45] 에서 최대값과 최소값을 찾기 (sorted, sort 사용 금지)

  4. a = [22, 1, 3, 4, 7, 98, 21, 55, 87, 99, 19, 20, 45] 에서 평균을 구하기

1. 구구단 2단 부터 9단까지 출력하기

while문으로 구구단 출력하기

1
2
3
4
5
6
7
x = 2
while x <= 9:
    y = 1
    while y <= 9:
        print("{} x {} = {}". format(x, y, x*y))
        y += 1
    x += 1
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
3 x 9 = 27
4 x 1 = 4
4 x 2 = 8
4 x 3 = 12
4 x 4 = 16
4 x 5 = 20
4 x 6 = 24
4 x 7 = 28
4 x 8 = 32
4 x 9 = 36
5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45
6 x 1 = 6
6 x 2 = 12
6 x 3 = 18
6 x 4 = 24
6 x 5 = 30
6 x 6 = 36
6 x 7 = 42
6 x 8 = 48
6 x 9 = 54
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
8 x 1 = 8
8 x 2 = 16
8 x 3 = 24
8 x 4 = 32
8 x 5 = 40
8 x 6 = 48
8 x 7 = 56
8 x 8 = 64
8 x 9 = 72
9 x 1 = 9
9 x 2 = 18
9 x 3 = 27
9 x 4 = 36
9 x 5 = 45
9 x 6 = 54
9 x 7 = 63
9 x 8 = 72
9 x 9 = 81

for문으로 구구단 출력하기

1
2
3
4
5
6
# range 함수를 사용한 구구단 
# nested for문
for i in range(2, 10): # 2단 부터 9단까지
    for j in range(1, 10): # 각 단에 곱할 수 : 1 ~ 9 
        print("{} x {} = {}".format(i, j, i*j))
    print('\n')
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18


3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
3 x 9 = 27


4 x 1 = 4
4 x 2 = 8
4 x 3 = 12
4 x 4 = 16
4 x 5 = 20
4 x 6 = 24
4 x 7 = 28
4 x 8 = 32
4 x 9 = 36


5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45


6 x 1 = 6
6 x 2 = 12
6 x 3 = 18
6 x 4 = 24
6 x 5 = 30
6 x 6 = 36
6 x 7 = 42
6 x 8 = 48
6 x 9 = 54


7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63


8 x 1 = 8
8 x 2 = 16
8 x 3 = 24
8 x 4 = 32
8 x 5 = 40
8 x 6 = 48
8 x 7 = 56
8 x 8 = 64
8 x 9 = 72


9 x 1 = 9
9 x 2 = 18
9 x 3 = 27
9 x 4 = 36
9 x 5 = 45
9 x 6 = 54
9 x 7 = 63
9 x 8 = 72
9 x 9 = 81


1 - 100까지 정수 중 2의 배수 또는 11의 배수를 모두 출력하기

1
2
3
4
nums = list(range(1, 101))
for x in nums:
    if x % 2 == 0 or x % 11 == 0:
        print(x)
2
4
6
8
10
11
12
14
16
18
20
22
24
26
28
30
32
33
34
36
38
40
42
44
46
48
50
52
54
55
56
58
60
62
64
66
68
70
72
74
76
77
78
80
82
84
86
88
90
92
94
96
98
99
100

a = [22, 1, 3, 4, 7, 98, 21, 55, 87, 99, 19, 20, 45] 에서 최대값과 최소값을 찾기 (sorted, sort 사용 금지)

sort 사용하여 찾은 경우

1
2
3
4
5
6
# sort 함수(정렬)을 사용한 경우
a = [22, 1, 3, 4, 7, 98, 21, 55, 87, 99, 19, 20, 45]


a.sort()
a[0], a[-1]
(1, 99)

sort 없이 for문으로 최소값 찾기

1
2
3
4
5
6
7
8
9
# 처음 만나는 값을 최소 값으로 가정
# 그리고 그 후 숫자를 만날때마다 현재 최소값보다 그 숫자가 작으면 최소값을 그 숫자로 업데이트

_min = a[0]
for x in a:
    if x < _min:
        _min = x
print(_min)
        
1

sort없이 for문으로 최대값 찾기

1
2
3
4
5
_max = a[0]
for x in a:
    if x > _max:
        _max = x
print(_max)
99
1
2
3
4
5
6
7
8
9
10
# 최대 최소 동시에
_min = a[0]
_max = a[0]
for x in a[1:]:
    if x < _min:
        _min = x
    if x > _max:
        _max = x

print(_min, _max)
1 99

a = [22, 1, 3, 4, 7, 98, 21, 55, 87, 99, 19, 20, 45] 에서 평균을 구하기

1
a = [22, 1, 3, 4, 7, 98, 21, 55, 87, 99, 19, 20, 45]

while문으로 평균 구하기

1
2
3
4
5
6
7
8
# while
i = 0
_sum = 0
while i < len(a): 
    _sum += a[i]
    i += 1
    
print(_sum / len(a))
37.0

for문으로 평균 구하기

1
2
3
4
5
6
# for
_sum = 0
for x in a:
    _sum += x
    
print(_sum / len(a))
37.0

댓글남기기