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 활용 예시
-
구구단을 2 - 9단까지 출력
-
1 - 100까지 정수 중 2의 배수 또는 11의 배수를 모두 출력
-
a = [22, 1, 3, 4, 7, 98, 21, 55, 87, 99, 19, 20, 45] 에서 최대값과 최소값을 찾기 (sorted, sort 사용 금지)
-
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
댓글남기기