본문 바로가기
Python

Python - for문

by DGK 2021. 10. 14.

 

인프런 파이썬 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.

 

for문

 

  • 기본 개념
# 기본 구조

for in <collection> 
     <Loop body>

# for문의 기본구조는 위와 같으며, collection에는 데이터 컨데이너
# 즉, 튜플·집합·리스트·딕셔너리 등이 올 수 있다.
# 또한, <Loop body>에 for문의 code가 작성된다.




# for문의 활용 예시

for v1 in range(10):      
    print('v1 is :', v1)
 
# 결과 : 0~9를 출력함 
# collection에 위치한 range(10)는 0~9까지의 숫자 범위를 의미한다.



for v2 in range(1, 11):    
    print('v2 is :', v2)
    
# 결과 : 1~10을 출력함
# collection에 위치한 range(1, 11)는 1~10까지의 숫자 범위를 의미한다.



for v3 in range(1, 11, 2):  
     print('v3 is :', v3)
     
# 결과 : 1,3,5,7,9를 출력함
# collection에 위치한 range(1, 11, 2)는 1~10까지의 숫자 범위에서
# 1부터 시작하여 한 칸씩 건너뛰며 숫자를 가져오겠다는 의미이다.

# 이처럼 range( )의 인자를 사용하여, 범위의 시작점·끝점과 
# for문을 돌리는 규칙 등을 설정할 수 있다.(ex range의 마지막 인자 : 2)



sum1 = 0

for v in range(1, 1001):
    sum1 += v

print('1 ~ 1000 sum :', sum1)

# 결과 : 1 ~ 1000 sum : 500500



print('1 ~ 1000 sum :', sum(range(1, 1001)))

# 결과 : 1 ~ 1000 sum : 500500
# sum( ) 함수를 사용하면, 위의 for문과 동일한 결과 값을 출력할 수 있다.



sum1 = 0

for v in range(1, 1001):
    sum1 += v
    print('1 ~ 1000 sum :', sum1)
    
# 해당 for문의 code는 앞선 for문과 전혀 다른 결과 값을 출력한다.
# 즉, print('1 ~ 1000 sum :', sum1)의 code 위치가 어디에 있는지에 따라
# 해당 for문의 결과 값도 달라진다.



print('1 ~ 1000까지 4의 배수의 총합 :', sum(range(4, 1001, 4)))

# 결과 : 1 ~ 1000까지 4의 배수의 총합 : 125500
# range( )의 마지막 인자인 4의 의미는 4~1000까지의 숫자 범위에서 
# 4부터 시작하여 세 칸씩 건너뛰며 숫자를 가져오겠다는 의미이다.

 

 

  • 응용 개념
# iterables 자료형

# iterables 자료형은 반복할 수 있는 객체를 의미하며,
# 문자열·리스트·튜플·집합·딕셔너리는 모두 iterables 자료형을 리턴하므로,
# for문에서 사용할 수 있다.

# iterables 리턴함수는 range, reversed, enumerate,
# filter, map, zip 등이 있다.




# for문 활용 예시

# 리스트

names = ['Kim', 'Park', 'Cho', 'Lee', 'Choi', 'Yoo']

for n in names:
    print('You are : ', n)


lotto_number = [11, 19, 21, 28, 36, 37]

for n in lotto_number:
    print("Current Number : ", n)



# 문자열

word = "beautiful"

for s in word:
    print('word : ', s)



# 딕셔너리

my_info = {
    "name": 'Lee',
    "Age": 33,
    "city": "Seoul"
}

for k in my_info:
    print('key :', my_info[k])  
    print('key :', my_info.get(k))  
    
    
# print('key :', k)는 딕셔너리의 키를 결과 값으로 출력한다.
# print('key :', my_info[k])는 딕셔너리의 벨류를 결과 값으로 출력한다.

# print('key :', k)는 딕셔너리의 키를 결과 값으로 출력한다.
# print('key :', my_info.get(k))는 딕셔너리의 벨류를 결과 값으로 출력한다.
    
    
    
for v in my_info.values():
    print('value :', v)
    
# 이 경우에는 print('value :', v)가 딕셔너리의 벨류를 결과 값으로 출력한다.
# 만약, my_info.values( )에서 values 대신 items 혹은 keys를 사용하면
# 키와 벨류를 함께 출력하거나, 키만 출력할 수도 있다.



# for-if-else문

name = 'FineAppLE'

for n in name:
    if n.isupper():    
        print(n)
    else:
        print(n.upper())  

# 결과 :
# 모든 글자가 대문자로 출력된다.
# 즉, FineAppLE의 한 글자씩 for문으로 검토하는 과정에서
# 만약 해당 글자가 대문자라면 if문이 실행되어 출력되는 것이고
# 만약 해당 글자가 소문자라면 else문이 실행되어 대문자로 변환 후 출력하는 것이다.

# isupper( ) 함수는 해당 단어가 대문지인지 아닌지를 검사하며,
# islower( ) 함수는 해당 단어가 소문자인지 아닌지를 검사한다.
# upper( ) 함수는 해당 단어를 대문자로 바꿔준다.



# break

numbers = [14, 3, 7, 23, 12, 43, 553, 28, 211, 21]

for num in numbers:
    if num == 43:
        print('Found : 43!')
    else:
        print('Not found : ', num)
        
# 이러한 for문은 43을 찾아서 출력한 후에도, 리스트 numbers의 모든 데이터를
# 검사하여 출력한다.(만약, 43만을 찾는 것이 목적인 코드라면 비효율적)


for num in numbers:
    if num == 43:
        print('Found : 43!')
        break
    else:
        print('Not found : ', num)
        
# 위의 코드와 달리 43을 찾으면 break가 실행되어,
# 더 이상 for문이 실행되지 않고 for문을 빠져나간다.(불필요한 리소스 낭비X)
# 즉, break는 for문을 중지하는 역할도 한다.



# continue

lt = ["1", 2, True, 4.3, complex(4)]

for v in lt:
    if type(v) is bool:
        continue
    print("current type : ", v, type(v))  
    print("multiply by 2 ", v * 3)	  
    
# 결과 : 1, 2, 4.3, 4+0j // 111, 6, 12.899999999999999, 12+0j
    
# continue는 if문의 조건이 만족되면, if문의 code를 실행하지 않고 건너뛴다.
# 즉, 데이터 True가 if문의 조건에 만족하기 때문에 True를 출력하는 
# code를 실행하지 않고 건너뛰어서 그 다음 데이터 4.3을 검토한다.(스킵 기능)

# continue는 데이터 모음에서 특정 데이터를 제외시키고
# for문을 돌리고자 할 때 주로 사용한다.(이 경우에는 불린 자료형을 제외)
    


# for-else문

numbers = [14, 3, 7, 23, 12, 43, 553, 28, 211, 21]

for num in numbers:
    if num == 23:
        print("Found : 23")  
        break
else:
    print('Not found : 23')
    
# 결과 : Found : 23
# 이 경우에는 리스트에 23이 있기 때문에, 23을 찾아 출력한 후
# break로 for문을 빠져온 것이다.

# if문의 조건이 충족되면 break가 걸리기 때문에
# else문은 실행되지 않는다.


for num in numbers:
    if num == 49:
        print("Found : 49")
        break
else:
    print('Not found : 49') 
    
# 결과 : Not found : 49
# 이 경우에는 리스트에 49는 없기 때문에, 모든 데이터를 for문으로 돌린 후에
# 49를 찾지 못하고 마지막으로 else문을 (1회만)실행시켜 해당 결과 값을 출력한 것이다.
    


# 구구단(1단~9단)

for i in range(1, 10):
    for j in range(1, 10):
        print('{:4d}'.format(i * j), end='')
    
    print()		# 출력창의 줄바꿈 용도



# 변환 예시

name2 = 'Aceman'


print('Reversed', reversed(name2))

# 결과 : Reversed <reversed object at 0x10b053520>
# 자료형의 변환 없이 reversed( ) 함수를 사용하면, 해당 변수의 id값이 출력된다.


print('List', list(reversed(name2)))

# 결과 : List ['n', 'a', 'm', 'e', 'c', 'A']
# 자료형의 변환을 해줘야만, 원하는 결과 값을 얻을 수 있다.

# reversed( ) 함수를 자료형 변환 함수와 함께 사용하면,
# 해당 데이터의 순서를 역으로 바꾼다.


print('Tuple', tuple(reversed(name2)))

# 결과 : Tuple ('n', 'a', 'm', 'e', 'c', 'A')
# 동일한 원리


print('Set', set(reversed(name2)))

# 결과 : Set {'A', 'a', 'c', 'e', 'n', 'm'}
# 단, 집합은 순서가 없는 자료형이기 때문에 위의 경우와 달리
# 해당 데이터의 순서가 임의로 출력된다.

 

'Python' 카테고리의 다른 글

Python - functions  (0) 2021.10.15
Python - while문  (0) 2021.10.14
Python - if문  (0) 2021.10.14
Python - 기초 자료형(집합)  (0) 2021.10.13
Python - 기초 자료형(딕셔너리)  (0) 2021.10.13

댓글