Python/Python 중급

Python 파이썬 FOR 문

독학코딩 2021. 11. 24. 21:10
반응형

안녕하세요 독학코딩입니다. 오늘은 파이썬 for문에 대해서 배워보겠습니다. for는 ~을 위해라는 뜻으로 글자 그대로는 이해하기가 조금 어렵습니다. 일반적으로는 반복문이라고 하여 특정 행동을 몇회 반복할 때 많이 사용되는 문법입니다. 

if 문
    if A == B: 
        print(B)
    elif A == C:
        print(C)
    else:
        print(D)

for 문
    for i in range(10):
        print(i)

while 문
    a = 0
    while a < 10:
        print(a)
        a += 1

try-except 문
    try:
        print(a)
    except:
        print("a in not defined")

 

 


Python for 문의 기본형태 for i in List

for 문은 반복문이라는 이름을 가진 문법으로 무언가를 반복하여 실행할 때 사용됩니다. 가장 기본적인 형태로 list의 원소들을 하나씩 출력하려고 한다면 for문 없이는 아래와 같이 해야될 것입니다.

list_a = ["코딩", "파이썬", "독학", "공부"]
print(list_a[0])
print(list_a[1])
print(list_a[2])
print(list_a[3])

이런 방법도 가능은 하지만, 보통의 경우는 list의 원소가 총 몇개인지도 알기 어렵고 수백, 수천개 일때도 많습니다. 또한 print(list_a[i])를 반복하여 작성하여야 된다는 점도 비효율적입니다. 그래서 for 문을 이용하면 아래와 같이 할 수 있습니다.

list_a = ["코딩", "파이썬", "독학", "공부"]
for element in list_a:
    print(element)

이런 방식이 반복적인 작성도 없고, list의 총 수를 몰라도 가능하여 훨씬 좋은 방법입니다. 눈치채신 분들도 있겠지만 for element in List에서 element는 부분은 원하시는데로 작성가능합니다. 또 for 문은 list만 가능한 건 아닙니다. tuple도 str도 dict도 가능합니다. range()를 이용한다면 int도 가능합니다.

tuple_a = (2, 3, 4, 5)
for i in tuple_a:
    print(i)

str_a = "코딩을 공부하자"
for i in str_a:
    print(i)
    
dict_a = {"이름": "홍길동", "나이": 25}
for i in dict_a:
    print(i, dict_a[i])

for i in range(5):
    print(i)

 

 

Python for 문의 활용형태 for i, j in A

for 문을 사용할 땐 i 하나만 넣을 수 있는건 아닙니다. 

list_b = [(2, 3), (4, 5), (6, 7)]
for i, j in list_b:
    print(i+j)

이렇게 list 자체의 원소가 2개씩 쌍을 이루는 경우라면 위와 같이 i, j로 두 가지 변수를 만들 수 있습니다. 

 

 

Python for 문의 활용형태 for i in range(int)

그런데 우리에게 기본제공되는 list가 없다면 어떻게 해야될까요? 혹은 list는 있어도 단순히 실행을 몇회 반복하거나, 단순한 수학적 실행을 몇회해야된다면요? 그럴 떄 range() 기능을 사용하시면 됩니다. range() 는 범위라는 의미에 맞게 int로 범위를 지정해주면 그 범위 만큼 for 문이 반복됩니다.

for i in range(5):
    print(i, "for 문의 반복")

이렇게 range(int)로 for문을 설정하시면 설정하신 범위 만큼 for문을 반복할 수 있습니다.

for i in range(4, 10):
    print(i, "for문의 반복")

범위라고 했으니 혹시 이렇게 range(4, 10)으로 직접 시작 범위를 주는 것도 가능합니다. 이런건 언제 사용할까요? i 의 값이 중요한 경우에 그렇습니다. 예를 들어

for i in range(4, 10):
    print(i*i)

이렇게 for 문의 반복 자체가 i 을 인자로 사용하는 경우 range()로 명확한 범위를 지정할 수도 있습니다.

 

증분도 가능합니다. 증분은 조금 어려운 말이죠? 증가량 같은 것입니다. 예를 들어 2, 4, 6, 8, 10 혹은 4, 8, 12, 16 같이 말입니다. 증분을 하는 방법은 이렇습니다.

for i in range(0, 20, 2):
    print(i, end=" ")
print("")
for i in range(0, 20, 4):
    print(i, end=" ")

물론 이렇게도 가능합니다.

for i in range(0, 10):
    print(i*2, end=" ")
print("")
for i in range(0, 5):
    print(i*4, end=" ")

어떤 방식으로 하시든 편하신 방법데로 하시며 됩니다. print() 안에 end=" "를 추가한 이유는 출력되는 값을 한줄에 표시하기 위함입니다. 필수적으로 사용하셔야 되는건 아닙니다.

 

음수도 가능합니다. 

for i in range(-10, 0):
    print(i, end=" ")
print("")
for i in range(-10, -20, -3):
    print(i, end=" ")

 

 

Python for 문의 활용형태 for i in range(len(List))

개인적으로 이 방법이 for 문을 가장 많이 사용하는 형태인것 같습니다. List의 원소에도 접근이 가능하고 반복 수인 i도 접근이 가능하여 어떤 실행을 하던간에 활용도가 높은거 같습니다.

list_a = ["코딩", "파이썬", "독학", "공부"]
for i in range(len(list_a)):
    print(i, list_a[i])

range는 인자로 int를 받기 때문에 list를 len()으로 감싸서 list의 길이로 range 범위를 지정하는 것입니다. 이런 방식으로 하면 i 자체로 수리적 접근도 가능하고 list_a[i]로 list의 원소도 접근이 가능합니다. 예를들어 list의 원소 중에서 짝수의 원소만 출력한다거나, 증분을 이용하여 매 3번째 원소만 출력한다거나 같은것이 가능합니다.

list_a = ["코딩", "파이썬", "독학", "공부"]
for i in range(0, len(list_a), 2):
    print(i, list_a[i])

 

 

Python for 문의 응용형태 for 문 + if문

이 방법 또한 가장 자주 이용하게 되는 for문의 형태입니다. if문과 복합적으로 이용하는 방식이죠. 위의 예제를 if문을 통해서 바꿔볼까요?

list_a = ["코딩", "파이썬", "독학", "공부"]
for i in range(len(list_a)):
    if i % 2 == 0:
        print(i, list_a[i])

이렇게 할 수 있습니다. 저는 개인적으로 if문을 사용하는걸 선호하지만 원하시는 방법으로 사용하시면 됩니다. for 문과 if분의 응용형태는 위의 예제 말고도 if문의 종류만큼 다양하지만 여기서 전부 다 설명드리긴 어려우니 꼭 잘 익혀두시길 바랍니다. 

 

 

Python for 문의 break

break는 무슨 뜻인가요? 깨다, 부수다인건 모두 아실 겁니다. 그럼 for 문에서 break는 무슨 용도일까요? 똑같습니다. for 문 자체를 부수는 겁니다. 

list_a = ["코딩", "파이썬", "독학", "공부"]
for i in range(len(list_a)):
    if i > 1:
        break
    print(i, list_a[i])

for i in range(len(list_a)):
    print(i, list_a[i])
    if i > 1:
        break

위의 예제를 자세히 살펴보시길 바랍니다. break는 if문과의 응용에서 많이 사용되며 if문의 조건에 맞게 되면 for 문을 부수고 더 이상 반복하지 않게 됩니다. 근데 위 예제의 첫번째와 두번쨰 for 문은 서로 뭐가 다른걸까요?

 

네, if > 1: break의 위치가 서로 다릅니다.

for i in range(len(list_a)):
    if i > 1:
        break
    print(i, list_a[i])
# 
# i = 0
#     i 는 1보다 작습니다.
#     print(0, "코딩")
# i = 1
#     i 는 1과 같습니다.
#     print(1, "파이썬")
# i = 2
#     i 는 1보다 큽니다.
#     break

첫번째 for 문은 위과 같은 실행 방식으로 흘러갑니다.

for i in range(len(list_a)):
    print(i, list_a[i])
    if i > 1:
        break

# i = 0
#     print(0, "코딩")
#     i 는 1보다 작습니다.
# i = 1
#     print(1, "파이썬")
#     i 는 1과 같습니다.
# i = 2
#     print(2, "독학")
#     i 는 1보다 큽니다.
#     break

그에 반해 두번째는 위와 같은 흐름으로 실행이 됩니다. 그래서 서로 출력된 값이 달랐던 겁니다. 이 예를 왜 설명드리는지 이해가 되시나요? break의 위치에 따라 for 문의 출력이 전혀 달라질 수 있으니 유의 하셔야 되기 때문입니다.

 

 

Python for 문의 continue

for 문의 완전히 부수고 나오는 것 말고 몇개만 스킵하는건 어떻게 할까요? 

list_a = ["코딩", "파이썬", "독학", "공부"]
for i in range(len(list_a)):
    if i == 1:
        continue
    print(i, list_a[i])

바로 continue를 사용하는 겁니다. break과 기본적인 사용방법은 동일합니다. if문으로 조건을 만들고 해당 조건에 맞으면 continue를 통해서 continue 아래의 실행을 무시하고 다음 실행으로 스킵하는 것입니다.

 

오늘은 파이썬의 for 문에 대해서 배워보았습니다. 모든 사용방법이 중요하긴 하지만 if문과의 응용이나 range(len(List))는 특히 많이 사용되니 잘 익혀두시길 바랍니다. 이제 while과 try-except문만 남아있습니다. 

반응형