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 に書き換えられそうな気がした。