2017-02-17 2 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

外部ループを取り除くことができます。あなたの内部ループのためにボード上の文字を 'row_index:'にしてください。または、すべてのループを取り除き、 'return '' .join(board [row_index])'だけを取り除く。 –

+0

ありがとう@StevenRumbalski非常に明確で簡潔なexplaination! – sim

答えて

1

row_indexはあなたの意見ではありません。 Pythonでは、使用している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])

を1行のソリューションを考慮することができます文字列のラプターはboard[row_index]です。 joinは、+=よりも効率的であると考えられます。これは、サブストリングの無駄な構築と破棄を避けるためです。 (それぞれ+=の完全に異なるStringを作成します。)特に長い文字列の場合は、joinが良い解決策です。

+0

ありがとう@シンクロナイザー!私はちょっと混乱しています。なぜ関数はサブリスト[0]を返しますか?関数がすべてのサブリストを反復処理している場合、すべてのサブリストを返さないのはなぜですか?ありがとう! – sim

+0

@simあなたは大歓迎です。あなたの質問に答えるために、ループ内であらかじめ成熟しているので、この関数はサブリスト0のみを文字列として返します。つまり、最初の反復の終わりに、ループが 'sub_lists'の残りの文字を追加する機会を得る前に戻ります。しかし、それは望ましくない動作です。それは役に立ちますか? – synchronizer

+0

それは素晴らしいです!頭痛がなくなった! :D – 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]) 
関連する問題