2017-02-17 1 views
0

for 루프를 사용하여 목록 목록에서 목록을 찾습니다.for 루프를 사용하여 목록의 목록에서 특정 목록을 반환하십시오.

왜 목록 2 대신 목록 0을 반환합니까?

def make_str_from_row(board, row_index): 
    """ (list of list of str, int) -> str 

    Return the characters from the row of the board with index row_index 
    as a single string. 

    >>> make_str_from_row([['H', 'O', 'U', 'S', 'E'], ['B', 'E', 'D'], ['C', 'H', 'E', 'E', 'S', 'E']], 2) 
    'CHEESE' 
    """ 

    letter = '' 
    line = '' 

    for row_index in board: 
     for letter in row_index: 
      line = line + letter 
     return line 

make_str_from_row([['H', 'O', 'U', 'S', 'E'], ['B', 'E', 'D'], ['C', 'H', 'E', 'E', 'S', 'E']], 2) 
+1

외부 루프를 제거하십시오. 내부 루프에 대해'for board [row_index] :'를 수행하십시오. 또는 모든 루프를 제거하고'return ''.join (board [row_index])'를 호출하십시오. –

+0

감사합니다. @StevenRumbalski 매우 명확하고 간결한 설명! – sim

답변

1

row_index은 귀하가 생각하는 것과 다릅니다. 파이썬에서 사용하는 for 루프 구문은 컨트롤 변수가 컬렉션에 요소를 저장하게합니다 (이 컨텍스트에서). 즉, board의 각 하위 목록을 반복하면서 각 반복마다 row_index이 다음 하위 목록을 가리 키도록 업데이트됩니다. 함수가의 연결된 문자열 버전을 반환하는 것을 의미하기 때문에, 다른 주에

for letter in board[row_index]: 
     line = line + letter 
    return line 

:

다음
sub_list = board[row_index] 
    for letter in sub_list: 
     line = line + letter 
    return line 

는 것과 같습니다 당신이 필요로하는 것은 다음 루프에 대한 당신의 내면의 단일 액세스하고 주어진 sub_list, 당신은 차를 연결하는 ...

return ''.join(board[row_index])

을 한 줄 솔루션을 고려할 수 있습니다 문자열의 racters는 board[row_index]입니다. join은 서브 문자열의 낭비적인 생성 및 삭제를 피하기 때문에 +=보다 효율적입니다. (각 +=에 대해 완전히 다른 String을 작성하십시오.) 특히 긴 문자열의 경우, join이 좋은 해결책입니다.

+0

감사합니다 @ 동기화! 나는 한 가지에 대해 약간 혼란 스럽다. 함수가 하위 목록 [0]을 반환하는 이유는 무엇입니까? 함수가 모든 하위 목록을 반복하는 경우 모든 하위 목록을 반환하지 않는 이유는 무엇입니까? 감사! – sim

+0

@sim 여러분을 환영합니다. 귀하의 질문에 대답하기 위해 함수는 루프 내에서 성숙한 상태로 돌아 오기 때문에 하위 목록 0 만 문자열로 다시 실행합니다. 다시 말하면 루프가 나머지'sub_lists' 문자를 추가 할 기회를 갖기 전에 첫 번째 반복이 끝날 때 돌아옵니다. (그것은 바람직하지 않은 행동이지만). 그게 도움이 되니? – synchronizer

+0

정말 멋지다! 두통이 제거되었습니다! :디 – sim

0

문제는 항상 목록의 첫 번째 요소를 반환한다는 것입니다. return은이 기능을 즉시 완료한다는 것을 명심하십시오. 또한 변수 letter을 삭제할 수 있습니다. for 루프의 일부이기 때문에 초기화 할 필요가 없습니다. 마지막으로 코드는 다음과 같이 간단히 표현할 수 있습니다.

def make_str_from_row(board, row_index): 
    """ (list of list of str, int) -> str 

    Return the characters from the row of the board with index row_index 
    as a single string. 

    >>> make_str_from_row([['H', 'O', 'U', 'S', 'E'], ['B', 'E', 'D'], ['C', 'H', 'E', 'E', 'S', 'E']], 2) 
    'CHEESE' 
    """ 

    return ''.join(board[row_index]) 
관련 문제