少数の扱いへの怒りと内包表記の実験

こういう事例があったとしましょう。なんPyの238ページあたりを参考にしています。

str_speeds = "38 アホンダラが 42 ボケカス 20 南港に沈めんぞ 40 誰がクマや 39"
arranged = str_speeds.split()
print(arranged)
speeds     = [int(item) for item in arranged if item.isdigit()]
print(speeds)
print("平均は",sum(speeds)/len(speeds))

半角スペースで区切られた文字列と数字のごちゃ混ぜから数字だけを取り出して平均を取ろうという例です。結果はこう出ます。

['38', 'アホンダラが', '42', 'ボケカス', '20', '南港に沈めんぞ', '40', '誰がクマや', '39']
[38, 42, 20, 40, 39]
平均は 35.8

で、これを各数値を小数点を込みのものにすると、isdigitが効かんのですよ。もちろんint()はfloat()に変えたとしても。で、調べていくと、正規表現を使ったクソめんどくさい処理をしないと、pythonでは文字列と小数点込みの数値の混じったリストから数値を取り出すことは不可能な模様。勘弁してくれや…意味がわからん…おっさんの仕事で扱うデータは株価、P/Eとか小数点込みのデータばっかりやぞ…そういう怒りが事例の文字列のチョイスに反映されています。