컴퓨터 공부/🐍 Python

for문에 else문이 딸랑?

letzgorats 2023. 12. 2. 15:23

문득 알고리즘 문제를 풀다가

해당 코드가 실행돼서 찾아봤다.

answer = 0
for w in words:
    for c in w:
        if w.count(c) > chars.count(c):
            break
    else: answer += len(w)

return answer

 

for문 2개로 구성되어 있는 이중 for 문이다. 

안쪽 for 문에서 break를 만난다면 안쪽 for문을 다 순회하지 않고 else 문 지점으로 오게 될텐데, else 문이 딸랑 나와도 되는지 의문이었다.

 

평소에는 저렇게 코드를 작성하지 않고 flag 변수를 따로 설정해서 아래와 같이 코드를 짜주곤 했다.

answer = 0
for w in words:
    flag = True
    for c in w:
        if w.count(c) > chars.count(c):
            break
            flag = False
    if !flag:
        answer += len(w)

return answer

 

하지만, 맨 위 코드에서 'else'문을 저렇게 사용하는 것이 맞는 문법이다.

'for' 루프는 'else'블록을 가질 수 있는데, 이 'else' 블록은 'for'루프가 중간에 'break' 문으로 인해 중단되지 않고 모든 반복을 완료했을 때 실행된다. 

 

여기서 'else' 블록은 내부 'for' 루프에 연결되어 있다. 만약 if w.count(c) > chars.count(c) 조건이 참이 되어 break가 실행되면, else 블록은 실행되지 않는다는 말이다. 반면, if 조건이 거짓이면 for 루프는 break 없이 계속 실행되고, 루프가 모든 반복을 마치면 else 블록이 실행된다. 이는 while 문에서도 마찬가지다. 

 

정말 유용한 문법이다. 비단, 이렇게 단순 for 문이 아니라, index를 끝까지 갔을 때, 즉 따로 index가 끝 지점일 때를 나타내고 싶을 때가 있었다. 이 때, 분기쳐주는 것을 단순히 else 만 해주면 된다!

 

 

반응형