アルゴリズムの問題:数字を当てて-Pythonは実現します


今日の最初のアルゴリズムの問題は、まず簡単な手を持ってみてください.この問題の要求は:
2人の甲乙は数字を当てて、甲はまず1、2、3の3つの数字の中からランダムに3回引いて、結果はguessです.乙はその後もランダムに3回抽出し,結果はanswerであった.そして甲乙二人の結果を比較する.例は次のとおりです.
guess:[1,2,3], answer: [1, 2, 3]
では結果は3回当てました
guess: [1,2,3] answer:[3,2,1]
では結果は1回当てました
guess: [1,2,3], answer:[3, 3,1]
では結果は0回当てました
guessとanswerの2つをパラメータとして入力し、推測の回数を返します.
私が考えたいくつかの答えは以下の通りです.
答え1:
class Solution:
    def game(self, guess: List[int], answer: List[int]) -> int:
        count = 0
        for i in zip(guess, answer):
            if i[0] == i[1]:
                count += 1
        return count

考え方はzipを使用して2つのリストを組み合わせ、各リストの単一要素からなるメタグループを返し、比較をループします.等しい場合は一時変数値を+1し、最終的に統計結果を返します.
答え2:
class Solution:
    def game(self, guess: List[int], answer: List[int]) -> int:
        count = 0
        for i in range(3):
            if guess[i] == answer[i]:
                count+=1
        return count

考え方:考えてみると、自分が複雑に考えていることに気づきます.つなぎ合わせる必要がないので、この2つのリストに対応する値を直接取って比較することができます.より簡単になります.直接循環して比較し、等しい場合は一時変数を+1し、最後に一時変数を返します.
答え3:
class Solution:
    def game(self, guess: List[int], answer: List[int]) -> int:
        return sum(map(lambda x,y: x==y, guess, answer))

構想:直接比較できる以上、もっと簡単にできないかどうか、map関数を考えて、map関数の最初のパラメータは直接匿名関数を使って要素の比較を行って、それから関数の実行結果を収集します.比較が等しい場合、結果はTrueであり、比較は等しくなく、結果はFalseである.
最後にmap関数の直接結果の合計を返します.
答え4:
class Solution:
    def game(self, guess: List[int], answer: List[int]) -> int:
        if guess == answer:
            return 3
        elif guess[0] == answer[0]:
            if guess[1] == answer[1]:
                return 2
            else:
                return 1
        elif guess[1] == answer[1]:
            if guess[2] == answer[2]:
                return 2
            else:
                return 1
        elif guess[2] == answer[2]:
            return 1
        else:
            return 0

考え方:guessとanswerを比較して、これは私が自分が最も悪いと思っている答えです.このような状況はこのような短いリストの対比にしか適していないので、もう少し長いコード全体を見ることができません.
以上が私の4つの答えで、もっと良い方法で実現することができますか?考えのある同級生は私にメッセージをくれます.