파이썬 2중 리스트 인덱스 값 가져오기 질문

조회수 2189회

아래 에 puzzle 리스트에서 n 에 입력되는 값 의 인덱스를 찾아내고 싶은데 첫 번째 리스트의 1,2,3,4 이후에는 에러가 자꾸 발생합니다. index = puzzle[i].index(n) 이부분이 이상한 것 같은데 어떻게 고쳐야 할지 막막합니다.

그리고 못찾으면 return 값을 None, 찾으면 index 값을 반환하고 싶은데 어떻게 해야 할까요?

puzzle = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
def get_index(puzzle, n):
    for i in range(len(puzzle)):
        index = puzzle[i].index(n)
        return index

get_index(puzzle, 3)

3 답변

  • 좋아요

    0

    싫어요
    채택 취소하기
    puzzle = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
    def get_index(puzzle, n):
        for idx1, i in enumerate(puzzle):
            for idx2, j in enumerate(i):
                if j == n:
                    return idx1, idx2
        return None
    
    get_index(puzzle, 10)
    #(2, 1)
    
    get_index(puzzle, 100)
    #None
    

    방법이 많아서 생각하시는대로 해보시는게 답인거같습니다

    혹시 나중에 참고하시라고... 올립니다

  • 꽤 훌륭한 코드를 짰네요. 그렇게 어렵지 않아요. 지금 상태의 함수에서 찾아낸 index는 사실 정답은 아니고, 찾고자 하는 2차원 인덱스 중에서 두번째 인덱스죠.

    첫번째 인덱스는 뭔가요? i 잖아요. 그래서, 찾았을 경우에는 (i, index) 를 리턴하면 될 거고요.

    지금 큰 문제는 3 같이 첫번째 줄에 있는 것들은 잘 찾는데, 7같은 것은 에러가 발생하는 문제죠.

    첫번째 줄(즉, puzzle[0])에 7이 존재하지 않기 때문에 발생하는 에러이고, 이건 if n in puzzle[i] 조건만 미리 검사해 보면 피해갈 수 있는 에러입니다.

    OK?

  • puzzle = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[3,14,15,16]]
    def get_index(puzzle, n):
        indice = []
        for i, puz in enumerate(puzzle):
            if n in puz:
                indice.append(i)
        return indice
    
    get_index(puzzle, 3)  # [0, 3]
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

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

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

(ಠ_ಠ)
(ಠ‿ಠ)