본문 바로가기

python

반복문 for

반복문 for의 기본 구조

반복문에는 보통 리스트, 튜플, 문자열이 사용된다.

집합형 자료 set은 순서가 없고 중복이 불가능하다는 점 때문에 반복문에 쓰이지 않는다.

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

# for i in [1,2,3,4,5]:  # 리스트
# for i in (1,2,3,4,5):  # 튜플 
for i in {1,2,3,4,5}:  # 집합형 자료 set 순서 없고 중복 불가
    print(i, end = ' ')

 

dict 타입도 종종 쓰인다

print(soft.items()) 에서 알 수 있듯이 dict의 data가 다수라면 리스트로 묶여 출력되기 때문에 리스트의 순서로 반복문을 사용할 수 있다.

# 사전형
soft = {'java':'웹용언어', 'python':'만능언어', 'MariaDB':'데이터처리'}
# dict_items([('java', '웹용언어'), ('python', '만능언어'), ('MariaDB', '데이터처리')])
print(soft.items())  

for i in soft.items():
    # print(i)
    print(i[0] + ' ^!^; ' + i[1])

dict_items([('java', '웹용언어'), ('python', '만능언어'), ('MariaDB', '데이터처리')])
key:java value:웹용언어
key:python value:만능언어
key:MariaDB value:데이터처리

 

 

keys(), values()로 key, value 값만 사용할 수도 있다.

for i in soft.keys():
    print(i, end = ' ')

print()
for i in soft.values():
    print(i, end = ' ')

java python MariaDB 
웹용언어 만능언어 데이터처리 

 

 

enumerate() 함수 사용 코드. 집합형 자료를 인덱싱하고 싶을때 사용한다.

li = ['a', 'b', 'c']
for i, j in enumerate(li):
    print(i, j)

0 a
1 b
2 c

 

 

평균, 분산, 표준편차

print('\n평균, 분산, 표준편차 구하기')  # 통계는 분산의 마법이다^!^;
jum = [-3,4,5,7,12]  
print(jum)

tot = 0  
for i in jum:
    tot += i
    
avg = tot / len(jum)  # 평균 구하기
print('mean : ', avg)
    
# 편차 = 평균과 데이터값의 차이

tot = 0
for i in jum:
    tot += (i - avg) ** 2  # 편차 제곱의 합
    
var = tot / len(jum)  # 분산 값 구하기
print('var : ', var)  # 분산 = 편차 제곱합의 평균
import math
print('std : ', math.sqrt(var))  # 표준 편차 구하기
print('std : ', var ** 0.5)

평균, 분산, 표준편차 구하기
[-3, 4, 5, 7, 12]
mean :  5.0
var :  23.6
std :  4.857983120596447
std :  4.857983120596447

 

 

for문 안에 for문을 사용하여 구구단 만들기

for n in [2, 3]:  # for 블럭 안에 for 블럭 넣기(다중 for)/집합형데이터 반복처리
    print('---{}단---'.format(n))
    for i in [1,2,3,4,5,6,7,8,9]:
        print('{}*{}={}'.format(n, i, n * i), end=' ')
    print()

---2단---
2*1=2 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18 
---3단---
3*1=3 3*2=6 3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27 

 

 

for문 continue break

datas = [1,2,3,4,5]
for i in datas:
    if i == 3: continue
    if i == 4: break
    print(i, end = ' ')
else:  # else는 필수가 아닌 선택사항
    print('정상 종료일 때 수행')

1 2 

 

 

for문과 continue를 활용한 합격자 출력 예시

jumsu = [95, 70, 60, 50, 100]
number = 0
for jum in jumsu:  # for문 안에 if문
    number += 1
    if jum < 70:continue
    print('%d번째 수험생은 합격'%number)

1번째 수험생은 합격
2번째 수험생은 합격
5번째 수험생은 합격

 

 

for문 안의 for문을 작성하는 두가지 방법

li1 = [3, 4, 5]
li2 = [0.5, 1, 2]
result = []
for a in li1:
    for b in li2:
        # print(a + b, end = ' ')
        result.append(a + b)
print(result)

datas = [a + b for a in li1 for b in li2]  # 자주 사용하는 형식
print(datas)

[3.5, 4, 5, 4.5, 5, 6, 5.5, 6, 7]
[3.5, 4, 5, 4.5, 5, 6, 5.5, 6, 7]

 

 

for문과 정규표현식의 활용

import re
ss = '''5일 코로나19 신규확진자 수가 3만4739명을 기록했다. 전일보다 1420명 줄었다. 
위중증 환자와 사망자 등 방역 관련 모든 지표가 안정세다. 
위중증 환자와 사망자 등 방역 관련 모든 지표가 안정세다.
위중증 환자와 사망자 위중증 환자와 사망자
이제 방역 관건은 코로나19 자체보다 독감이라는 말이 의료계에서 나온다. 
3년만에 독감 유행이 예고됐으며 독감과 코로나19가 동시 유행할 경우 환자 중증도가 크게 올라갈 우려가 있어서다. 
게다가 올해 유행할 독감은 독감 바이러스 중에서도 가장 강한 'A형 H3N2'다. 
'''
# 한글과 공백만 출력(영문, 숫자, 특수문자, 마침표 등등 제거)
ss2 = re.sub(r'[^가-힣\s]', '', ss) 
print(ss2)
# 공백을 기준으로 짤라서 list를 반환(순서가 있고 중복을 허용함)
ss3 = ss2.split(' ')  
print(ss3)

일 코로나 신규확진자 수가 만명을 기록했다 전일보다 명 줄었다 
위중증 환자와 사망자 등 방역 관련 모든 지표가 안정세다 
위중증 환자와 사망자 등 방역 관련 모든 지표가 안정세다
위중증 환자와 사망자 위중증 환자와 사망자
이제 방역 관건은 코로나 자체보다 독감이라는 말이 의료계에서 나온다 
년만에 독감 유행이 예고됐으며 독감과 코로나가 동시 유행할 경우 환자 중증도가 크게 올라갈 우려가 있어서다 
게다가 올해 유행할 독감은 독감 바이러스 중에서도 가장 강한 형 다 

['일', '코로나', '신규확진자', '수가', '만명을', '기록했다', '전일보다', '명', '줄었다', '\n위중증', '환자와', '사망자', '등', '방역', '관련', '모든', '지표가', '안정세다', '\n위중증', '환자와', '사망자', '등', '방역', '관련', '모든', '지표가', '안정세다\n위중증', '환자와', '사망자', '위중증', '환자와', '사망자\n이제', '방역', '관건은', '코로나', '자체보다', '독감이라는', '말이', '의료계에서', '나온다', '\n년만에', '독감', '유행이', '예고됐으며', '독감과', '코로나가', '동시', '유행할', '경우', '환자', '중증도가', '크게', '올라갈', '우려가', '있어서다', '\n게다가', '올해', '유행할', '독감은', '독감', '바이러스', '중에서도', '가장', '강한', '형', '다', '\n']

 

 

for문을 활용하여 단어와 단어의 발생횟수를 dict로 저장하는 방법

# 단어의 발생횟수를 dict로 저장(키(key)와 값(value)으로 이루어진 여러 쌍의 데이터를 담아 둘 때 사용)
cou = {} 
for i in ss3:
    if i in cou:
        cou[i] += 1  # 있으면 1을 추가해 주고
    else:
        cou[i] = 1  # 없으면 1을 준다
        
print(cou)

{'일': 1, '코로나': 2, '신규확진자': 1, '수가': 1, '만명을': 1, '기록했다': 1, '전일보다': 1, '명': 1, '줄었다': 1, '\n위중증': 2, '환자와': 4, '사망자': 3, '등': 2, '방역': 3, '관련': 2, '모든': 2, '지표가': 2, '안정세다': 1, '안정세다\n위중증': 1, '위중증': 1, '사망자\n이제': 1, '관건은': 1, '자체보다': 1, '독감이라는': 1, '말이': 1, '의료계에서': 1, '나온다': 1, '\n년만에': 1, '독감': 2, '유행이': 1, '예고됐으며': 1, '독감과': 1, '코로나가': 1, '동시': 1, '유행할': 2, '경우': 1, '환자': 1, '중증도가': 1, '크게': 1, '올라갈': 1, '우려가': 1, '있어서다': 1, '\n게다가': 1, '올해': 1, '독감은': 1, '바이러스': 1, '중에서도': 1, '가장': 1, '강한': 1, '형': 1, '다': 1, '\n': 1}

 

 

for 문과 정규표현식을 활용한 전화번호 형식 체크하는 방법

for test_str in ['111-1234', '일이삼-사오육칠', '2222-1234']:
    if re.match(r'^\d{3,4}-\d{4}$', test_str):  #숫자로 앞자리가 3~4글자, 뒷자리가 4글자인지 매칭
        print(test_str, '전화번호 맞아요')
    else:
        print(test_str, '전화번호 형식을 맞춰주세요')

 

 

sum() 함수

print(sum([1,2,3]))

6

 

 

dict 자료형과 sum함수 활용

과일 쇼핑 값 출력

print('사전형 자료로 과일값 출력')
price = {'사과':2000, '감':500, '배':1000}  # 판매 대상
guest = {'사과':2, '감':3}
bill = sum(price[f] * guest[f] for f in guest)  #sum은 내장 함수(합계 구하기)
print('고객이 구매한 과일 총액 : {}원'.format(bill))

사전형 자료로 과일값 출력
고객이 구매한 과일 총액 : 5500원

 

 

for문을 활용하여 다른 type으로 변형

temp = [1,2,3]
for i in temp:
    print(i, end = ' ')
print()
print([i for i in temp])  #리스트
print({i for i in temp})  #set

1 2 3 
[1, 2, 3]
{1, 2, 3}

 

 

for문으로 변경한 값을 저장하는 기본적인 형태 2가지

list() 함수로 리스트를 생성할 수도 있다.

temp = [1,2,3]
temp2 = list()

for i in temp:
    temp2.append(i + 10)  # 10씩 더하기
print(temp2)

temp2 = [i + 10 for i in temp]  # 위에 작성한거 줄여쓰기
print(temp2)

 

 

for문과  if문 활용

datas = [1,2,'a',True,3]
li = [i * i for i in datas if type(i) == int]  # 숫자일때 자기 자신 곱셈 하기
print(li)

[1, 4, 9]

 

 

for문과 set 자료형 활용

datas = {1,1,2,2,2,3}  # 키,벨류로 되어있으면 딕트, 아니면 set / set은 중복 불허
se = {i * i for i in datas}
print(se)

{1, 4, 9}

 

 

for문과 dict 자료형 활용

dict 자료형을 활용할때 items()함수는 key vlaue 값에 접근하기 쉽게 만들어준다.

for문과 items()를 활용하여 key, value 값을 value, key 형태로 변환했다.

id_name = {1:'tom', 2:'james'}
name_id = {value:key for key, value in id_name.items()}
print(name_id)

{'tom': 1, 'james': 2}

'python' 카테고리의 다른 글

function  (0) 2022.10.05
for문, range() - 예제  (1) 2022.10.05
반복문의 continue, break  (0) 2022.10.05
while문 예제  (0) 2022.10.04
while 반복문, time.sleep()  (0) 2022.10.04