二分探索で数字を仕分け

ちょっと面白いコードを見つけました。と言ってもPythonの公式リファレンスに載ってるものですが。

>>> def grade(score, breakpoints=[60, 70, 80, 90], grades='FDCBA'):
        i = bisect(breakpoints, score)
        return grades[i]

>>> [grade(score) for score in [33, 99, 77, 70, 89, 90, 100]]
['F', 'A', 'C', 'C', 'B', 'A', 'A']

8.6. bisect — 配列二分法アルゴリズム — Python 3.3.6 ドキュメント

bisectは二分探索のためのモジュールです。 ですがよくある使い方とは違いますね。

この場合、score(例えば89)がbreakpointsのどこに入るかを探します。 そうしてiには3が入り、grades[3]、すなわちBが結果に出る、と。

条件分岐を一度も使わない書き方がスマートですね。