ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] cannot unpack non-iterable NoneType object 오류
    문제 해결 2024. 6. 7. 00:59

    문제

    TypeError: cannot unpack non-iterable NoneType object

     

        알고리즘 문제를 푸는 도중에, 해당 오류가 발생하여(은근 자주 봤다) 정리해본다. 이번 케이스의 경우, 행마다 입력받는 값을 공백을 기준으로 쪼개서 2차원 리스트에 원소로 바로 넣어주려다가 발생했다. 너무 욕심이 과했나 아무튼 다음에 백퍼 또 같은 문제랑 마주할 것 같아서 글로 남겨두기로 했다...

     

    코드

    li = [[] for _ in range(m)]
    
    for i in range(m):
        a, b = li.append(map(int, input().split()))

    나의 욕심이 그득한 코드... 대체 파이썬 너는 어디까지 한 번에 처리해주고 어디부터 쪼개줘야 하는데요

    해결

        append() 메소드는 리스트에 원소를 추가하지만, 반환값을 가지지 않는 메소드(NoneType)이다. 이 append() 메소드의 결과 즉 None을 변수 a, b에 언패킹하려고 하면서 오류가 발생하는 것. 즉, 대입 순서를 전~~~혀 고려하지 않고 내 맘대로 합쳐서 썼다는 거다

    * 언패킹(unpacking): 튜플이나 리스트 같은 여러 값을 가진 데이터 구조를 여러 변수에 나누어 담는 작업을 의미

       e.g. (a, b) = (1, 2)는 (1, 2) 튜플을 언패킹하여 a에 1, b에 2를 대입하는 것

    li = [[] for _ in range(m)]
    
    for i in range(m):
        a, b = map(int, input().split())
        li[i].append(a)
        li[i].append(b)
    
    print(li)

        따라서 a, b에 각각 입력 값을 매핑해준 후, 반복문을 돌면서 리스트의 i번째 원소에 a, b값을 각각 append 해주는 방식으로 해결했다. 그 결과, 원하던 대로 [[a0, b0], [a1, b1], ... ] 이런 2차원 배열이 완성된다.