for 반복문
- while은 스스로 제어를 해야했다면
- for는 순회가 가능한걸 자동적으로 순회할 수 있게
- 리스트, 문자열 등등 순회 가능한 객체를 순회하면서 값을 처리할 때 사용
- 아래와 같은 문법으로 사용
- 여기서 i는 매번 수행 될 때마다, a의 아이템으로 순차적으로 변경 됨
- 모든 아이템이 순회되면 for 블록 종료
# while보다는 좀 수월함.
#while에는 인덱스를 넣어서 제어했고, 실수하면 무한루프가 발생
#for는 각 원소를 그때그때 가져오기때문에
a = [1, 2, 4, 3, 5]
for i in a:
#a를 순회하는데, 각 원소를 i에 대입하겠다
print (i, i * 2)
print('for문 끝')
결과:
1 2
2 4
4 8
3 6
5 10
for문 끝
#number는 현재의 원소. i로 해도되고 그냥 변수로 생각
a = [1, 2, 4, 3, 5]
for number in a:
print(number)
print('hahah')
결과:
1
2
4
3
5
hahah
문자열의 아이템 출력하기
- 문자열의 경우 순회 가능, 리스트의 유사하게 순회 가능
#정수형은 순회x.
#순회할 수 있다는 것은 순서가 있다, 인덱스가 있다.
for x in 10:
print(x)
결과:
#문자열은 순회할 수 있으니까. 뭐 리스트나
for x in 'hello world':
print(x)
#같은 코딩
# a = 'hello world'
# for character in a:
# print(character)
결과:
h
e
l
l
o
w
o
r
l
d
리스트 아이템 출력하기 (for + if)
#짝수인경우: /2의 나머지 출력
#홀수인경우: +1 값 출력
a = [1, 10, 3, 4, 5]
for num in a:
if num % 2 == 0: #(조건)나머지가 2인것이면,
print('짝/2', num/2) #/2 의 값
else:
print('홀+1', num+1)
결과:
홀+1 2
짝/2 5.0
홀+1 4
짝/2 2.0
홀+1 6
dict의 아이템 출력하기
- dictionary의 경우 기본적으로 순회 하게 되면 key값을 참조
- keys()함수를 이용하여 key 값만 순회 가능
- values()함수를 이용하여 value 값만 순회 가능
- items()함수를 이용하여 tuple형태로 key, value 순회 가능
#dict 순환가능하지만, 그냥하면 키만 가져옴
a = {'korea': 'seoul', 'japan': 'tokyo', 'canada': 'ottawa'}
for k in a:
print(k) #키만 출력
print('----')
for k in a:
print(k, a[k]) #a[k]로 값을 가져오자
결과:
korea
japan
canada
----
korea seoul
japan tokyo
canada ottawa
#함수로 호출
for v in a.values(): #values()함수로 값만 출력
# for v in a.keys(): 키만 출력
print(v)
결과
seoul
tokyo
ottawa
*참고
https://s-s-o-story.tistory.com/48
a.items()
list(a.items()) #튜플을 원소로 갖는 리스트
결과
[('korea', 'seoul'), ('japan', 'tokyo'), ('canada', 'ottawa')]
#튜플인경우에는 ' , '를 이용해서 두개의 값을 한꺼번에 받아올수 있다
for k, v in a.items():
print(k, v)
for에서 index 사용하기
- 기본적으로 for에 리스트를 순회하는 경우, 값만 추출 함
- 아래와 같은 코드로 인덱스와 값 모두 사용 가능(enumerate 함수 이용)
#인덱스와 값 둘다 가져오기
#while경우에는 index를 가지고 제어. 증가시키면서 진행.
#for가 인덱스가 필요한경우 in enumerate를 쓰자!
a = [1, 2, 3, 4, 5]
for i, num in enumerate(a): #인덱스, 값 둘다 가져올 수 있다
print(i, num)
결과
0 1
1 2
2 3
3 4
4 5
#while로 했을때
a = [1, 2, 3, 4, 5]
i=0
while i<len(a):
print(i, a[i])
i+=1
위와 같은 결과
a = [1, 2, 3, 4, 5]
for i, x in enumerate(a):
if i > 2: #인덱서 3번자리부터.
#인덱스가 같이나오니까 인덱스로 조건 제어 가능!
print(i, x)
결과
3 4
4 5
break
- for의 경우에도 특정 조건일 때, loop 종료가 가능
a = [100, 90, 80, 70, 60, 50]
for num in a:
print(num)
결과
100
90
80
70
60
50
a = [100, 90, 80, 70, 60, 50, 81]
for num in a:
if num < 80:#값이 80보다 작으면 종료하고싶어.
break
print(num)
#80보다 작은 70,60,50값이 출력되지 않음
#가장 마지막 81은 출력되지 않았음. 80보다 작은 70에서 코드 중단
결과
100
90
80
continue
- 해당 아이템을 건너 뛰고 싶을 때 사용
a = [100, 90, 80, 70, 60, 50, 81]
for num in a:
if num >= 60 and num <= 70: #60<=num<=70 건너뛰겟다
continue
print(num)
#60이상 70이하인 60, 70은 빠짐.
#마지막 81도 출력됨
결과
100
90
80
50
81
loop 중첩
- 반복문의 경우에도 중첩하여. (여러 뎁스에 걸쳐서.) 반복에 반복! 사용 가능
- 중첩이라는 것은 반복문 블록의 코드안에 또 반복문의 코드가 작성되는 것을 의미
- 이런 경우, 내부 루프는 외부 루프가 수행되는 만큼 반복 수행 됨
- 또한 중첩의 경우 무한히 가능
a=[1,2,3]
for i in a: #1.
for j in a: #2.
print(i*j)
#1. a리스트를 i변수로 순회. 처음 i=1
#2. a리스트를 j변수로 순회. 처음 j=1 -> 1*1출력
#3. 2번for로 가서 j=2(i=1인상태) -> 1*2출력
#4. 다시 2번 for로 가서 j=3(i=1인상태) -> 1*3출력
#=> 2번 for에서 리스트 1,2,3을 모두 돌았으니까, 1번for로 감
#a리스트 i=2로 다시 수행
#결과적으로 9개 출력
#i가 1일때-> j: *1, *2, *3
#i가 2일때-> j: *1, *2, *3,
#i가 3일때-> j: *1, *2, *3
결과
1
2
3
2
4
6
3
6
9
구구단 출력하기
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)
# while문으로도 바꿀 수 있어. for와 while차이거의 없어 그냥 구문의 차이일 뿐
위 구구단 결과
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
...
i = 1 #i단
while i < 10:
i = i + 1
j = 1
while j < 10: #곱할꺼
print(i, 'X', j, '=', i*j)
j = j + 1
결과 동일
collection의 길이
- 문자열, 리스트, dict 등, 값을 담고있는 것들은
- len() 내장함수로 계산 가능
- 내장함수란 파이썬 내부에 구현되어 있어서, import하지 않고도 사용 가능한 함수를 의미
- abs, len, type, range 등이 있음 (과정 진행하면서 필요할 때마다 다룰 예정)
a = [1, 2, 3, 4, 5, 1]
print(len(a))
len('hello world')
결과
6
11
range 함수
- 리스트를 쉽게 만들 수 있는 내장함수
- 주어진 값에 따라 다양한 결과를 반환
- 1 - 100까지의 리스트 생성하기
range(10)
range(0, 10)
#리스트로 변환해주면, 숫자에 해당하는 리스트로 만들어줌
list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a = list(range(2, 10)) #2부터~ 마지막 숫자 전까지
print(a)
[2, 3, 4, 5, 6, 7, 8, 9]
- 연습문제 1부터 50사이의 5의 배수만을 갖는 리스트를 생성하시오
list(range(5, 51, 5)) #마지막에는 건너뛰는 숫자
[5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
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] 에서 평균을 구하세요.
- 구구단을 2 - 9단까지 출력하시오.
#이전에 for문에서 구구단 출력하기
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)
x=2 #2단부터
while x<=9: #9단까지
y=1 #y는 계속 초기화가 되야되. 그래서 여기에
while y<=9:
print(x,'*', y, '=', x*y)
y+=1
x+=1 #바로뒤에 while문 다돌면, +1단해서 다시 돌아야지. 2~9단까지 1씩 증가
2. 1 - 100까지 정수 중 2의 배수 또는 11의 배수를 모두 출력하시오.
#1 - 100까지 정수 중 2의 배수 또는 11의 배수를 모두 출력하시오.
n=list(range(1,100)) #1~100까지 정수들 list
for x in n: #리스트 원소를 x로 잡아서
if x%2==0 or x%11==0: #2의 배수(/2나머지0) 또는, 11의 배수(/11나머지0)
print(x)
결과
2
4
6
8
10
11
...
3. a = [22, 1, 3, 4, 7, 98, 21, 55, 87, 99, 19, 20, 45] 에서 최대값과 최소값을 찾으시오. (sorted, sort 사용 금지)
# sort 함수(정렬)을 사용한 경우
a = [22, 1, 3, 4, 7, 98, 21, 55, 87, 99, 19, 20, 45]
a.sort()
a[0], a[-1]
결과
(1, 99)
#방법 : 처음 만나는 숫자를 최소값으로 생각하고
#다음숫자로 넘어가면서 지금 숫자보다 작으면 그 숫자를 최소값으로 업데이트 하는 구문
a = [22, 98, 54, 76, 34, 3, 45]
mini=a[0] #a[0]초기값. a리스트의 첫번째 값.
for x in a: #a리스트의 원소 x를 반복할껀데
if x < mini: #만약 초기값mini가 x보다 작으면,
mini=x #mini가 x로 업데이트. 작을 경우 그 작은 값으로 업데이트
print('mini값 변화', mini)
print('마지막mini. 최소값', mini)
결과
mini값 변화 22
mini값 변화 22
mini값 변화 22
mini값 변화 22
mini값 변화 22
mini값 변화 3
mini값 변화 3
마지막mini. 최소값 3
# 최대 최소 동시에
a = [22, 98, 54, 76, 34, 56, 9, 7, 5, 3, 45]
mini=a[0]
maxi=a[0]
for x in a:
if x<mini:
mini=x
if x>maxi:
maxi=x
print(mini, maxi)
3 98
4. a = [22, 1, 3, 4, 7, 98, 21, 55, 87, 99, 19, 20, 45] 에서 평균을 구하세요.
a = [22, 1, 3, 4, 7, 98, 21, 55, 87, 99, 19, 20, 45]
#while
i=0
isum=0 #평균 담을 변수
while i<len(a):#돌아야지
isum+=a[i] #isum 변수0에 반복해서 a를 하나씩 더해줘 a[0]인 22부터
i+=1
print(isum/len(a))
결과
37
# for
#for에서는 인덱스 필요없고
isum=0
for x in a :
isum+=x
print(isum/len(a))
결과 동일
'IT_Python' 카테고리의 다른 글
[파이썬기초] Lambda 함수. filter/map/reduce. 필터링/변환, 치환/연속 연산 (0) | 2021.12.17 |
---|---|
[파이썬기초] 함수 def. 파라미터/return/multiple return/지역변수/전역변수/*args/**kwargs (0) | 2021.12.16 |
[파이썬기초] 반복문. while. break/continue/무한루프 (0) | 2021.12.14 |
[파이썬기초] 조건문 if else elif / 중첩 조건문 (0) | 2021.12.13 |
[파이썬기초] set. 중복/집합/연산(합집합,교집합...) set()/union/intersection (0) | 2021.12.12 |