ちんぱんの雑記

チラシの裏

数値の初期化

0 や None 以外で数値の初期化する方法は -float("inf") もあるって話。

-float になっているのは負の数であることを意味していて、inf は infinity ってこと。

 

実務で使うかどうかは別だけど、そういう選択肢を持っておいて損はないと思う。

さして得もないかもしれないけど…。

 

例えば、整数の配列の3番目の最大値があればそれを返却、3番目の最大値が無ければ1番目の最大値を返却する関数があったとする。

実装の例は次のとおり。

def third_max(nums: List[int]) -> int:
    first_max: float = -float("inf")
    second_max: float = -float("inf")
    third_max: float = -float("inf")

    for num in nums:
        if num > first_max:
            third_max = second_max
            second_max = first_max
            first_max = num
        elif first_max > num > second_max:
            third_max = second_max
            second_max = num
        elif second_max > num > third_max:
            third_max = num

    if third_max == -float("inf"):
        return int(first_max)
    else:
        return int(third_max)

 

なんで 0 にしないかというと、3番目の最大値が負の整数だった場合におかしくなるし、意図せず影響しちゃうから。

でも -float("inf") ならそんなことは気にしなくても大丈夫。

 

None にしないのは None > int が成立しないから。

最初は None で初期化するのは名案だと思ったんだけどな…。

 

見直して思ったけど、変数の定義や最後の分岐は pythonic に書き換えられそうな気がした。