単調増加の数列を、連続する値毎にまとめる簡潔な記述方法があったのでメモしておきます。
import itertools
sample = [1,2,3,5,6,7,9,10]
[list(g) for _, g in itertools.groupby(
sample, key=lambda n, c=itertools.count(): n - next(c))]
# => [[1, 2, 3], [5, 6, 7], [9, 10]]
itertools.groupby は、第一引数のイテラブルの各要素を第二引数に渡して、その戻り値が同一の連続する要素を返すイテレータを、第二引数の関数に渡した要素とともに返します。
上の例では、第一引数にsample、第二引数keyにラムダ式をとっています。
ラムダ式には、nと、省略可能なcの二つの引数がありますが、cにはitertools.count()のデフォルト値が指定されており、groupbyにおける連続する要素の同一性の判定の際に呼ばれる時は、nにsampleの各要素が渡されます。itertools.count()は、0から1ずつ増加する数を返すイテレータを生成します。cのデフォルト値はラムダ式が定義されたときに一回だけ実行され、0から順に+1された数を返すイテレータが代入されます。ですので、n - next(c)は、next(c)は毎回の呼び出しで1ずつ増加するので、nが1づつ増加すれこのラムダ式からは同じ値が返されますが、nが1より大きく増加すれば違う値が返されます。このラムダ式の戻り値が同一の連続する要素を返すイテレータがgで、list(g)により、連続した要素をネストしたリストにまとめたリストがリスト内包表記により生成されます。