bugfix> python > 投稿

ここにコード(割り当て)があります。このコードは正しいのですが、私はそれをいじって2回目に試しましたが、私の理解が正しいかどうかわかりません。

def isWordGuessed(secretWord, lettersGuessed):
    '''
    secretWord: string, the word the user is guessing
    lettersGuessed: list, what letters have been guessed so far
    returns: boolean, True if all the letters of secretWord are in lettersGuessed;
      False otherwise
    '''
    # FILL IN YOUR CODE HERE...
    for i in secretWord:
        if i not in lettersGuessed:
            return False
    return True

したがって、戻り値のTrueがループ外にある場合、secretWordのすべての文字がそこにある場合にのみTrueを返しますが、1文字が欠落している場合は、すぐにFalseを返します。これは正しいです?

ありがとう!

回答 1 件
  • 正しい-これは以下と同等です:

    all(lett in lettersguessed for lett in secretword)
    
    

    リスト(または文字列)のメンバーシップテストは O(n) であることに注意してください 、比較的大きな secretword がある場合は高速になります   lettersguessed より  すること:

    def is_word_guessed(secretword, lettersguessed):
        guessed_set = set(lettersguessed)
        return all(lett in guessed_set for lett in secretword)
    
    

    これは、セットのメンバーシップのテストが一定時間( O(1) )、そのため、セットを構築するコストは、メンバーシップチェックへの多くの呼び出しによって相殺されます。

    これらの種類のエッジ最適化ではいつものように、変更を行う前にプロファイリングを強くお勧めします。

あなたの答え