strでmaxをかけると直感と異なる動作になる[Python]

7月 25, 2020

# 正規表現で文字列から数字を抽出していたときのこと
l = re.findall(r"([1-9]\d*)", "for 5-10 h")

# 抽出されたリストにはstrで数字が入っている
l
>> ['5', '10']

# maxで大きい方をとりたい
max(l)
>> '5' # なぜ5が選ばれるのか?

# 困ったのでとりあえずintにキャスト
l2 = [int(s) for s in l]
>> [5, 10]

# こうすると直感通り10が選ばれる
max(l2)
>> 10
# 別のパターンで検証
l=re.findall(r"([1-9]\d*)", "400, 500, 600 and 800 degC")

max(l)
>> '800' # こちらの場合だとうまくいく。繰り上がりが原因か?

Python

Posted by vastee