python pop() 질문

조회수 653회
def count(inteval):
    co = 0
    for num in inteval:
        if inteval.pop() <= time_of_del:
            co = co + 1
        else: pass
    return co

inteval[6, 5, 1, 1, 1], time_of_del5입니다

답이 왜 3이 나오죠? 4가 나오도록 만든건데...

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    1. 잘 모르겠으면 일단 로그를 잔뜩 찍어봅니다.

    def count(inteval):
        co = 0
        for num in inteval:
            print "----------"
            print "--> inteval ", inteval
            print "num: ", num
            popped = inteval.pop()
            print "popped: ", popped
            if popped <= 5:
                print "co + 1 !!"
                co = co + 1
                print "co: ", co
            else:
                print "pass"
            print "<-- inteval ", inteval
        print "----------"
        print co
        return co
    count([6, 5, 1, 1, 1])
    

    결과가 이렇게 나옵니다.

    ----------
    --> inteval  [6, 5, 1, 1, 1]
    num:  6
    popped:  1
    co + 1 !!
    co:  1
    <-- inteval  [6, 5, 1, 1]
    ----------
    --> inteval  [6, 5, 1, 1]
    num:  5
    popped:  1
    co + 1 !!
    co:  2
    <-- inteval  [6, 5, 1]
    ----------
    --> inteval  [6, 5, 1]
    num:  1
    popped:  1
    co + 1 !!
    co:  3
    <-- inteval  [6, 5]
    ----------
    3
    

    다른 건 모르겠고 일단 뭐 하나는 확실히 이상합니다. 뭐여?? 왜 inteval이 점점 짧아지지 ??


    2. 내가 알고 있던 게 부정당하는 기분이 들면 공식문서(또는 믿을 만한 강좌)를 열어서 토씨 하나 놓치지 말고 다시 잘 읽도록 합니다.

    pop()은 리스트의 맨 마지막 요소를 돌려주고 그 요소는 삭제한다.

    따라서 이 코드는 정상 작동을 하고 있는 겁니다. co: 3 이후에 순회되는 for문은 for 1 in [6, 5]:를 검증할 텐데요, [6, 5]1이 없는데 어떻게 이 for 블록이 실행되겠어요. 따라서 이 for 루프는 여기서 중단이 됩니다. (로그가 찍히다 만 것을 보실 수 있지요.) 따라서 inteval 처리를 하다 만 결과로서의 3이 최종 결과가 되는 거구요.


    3. 그러면 이 문제는 pop()을 어떻게 잘 활용하면 될 문제인가? 제 생각에는 그보다는 그냥 아예 접근을 바꿔 보는 것도 방법이 아닌가 합니다. 왜냐하면 만약 원하시는 것이 단지

    배열과 특정 정수를 입력하면 → 그 배열 원소 중 그 정수보다 크지 않은 원소들의 갯수를 출력

    하는 것뿐이라면... 사실 그런 건 파이썬에서는 1줄짜리 코드로 끝나기 때문이죠.

    # 핵심 아이디어: 조건에 따라 목록을 filter한다.
    def count(ints, the_int) :
        return len(filter(lambda x: int(x) <= the_int, ints))
    
    print count([6,5,1,1,1], 5)
    # 출력: 4
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)