itertools を使ってみる修行、その 1 -- groupby

itertools.groupby を使ってみる。0 から 9 の整数を 3 で割った余りでグルーピングしてみる。

>>> [(x[0], [y[0] for y in x[1]]) for x in itertools.groupby(sorted([(x,x%3) for x in range(10)], key=lambda x:x[1]), lambda x:x[1])]
[(0, [0, 3, 6, 9]), (1, [1, 4, 7]), (2, [2, 5, 8])]
  • lambda x:x[1] を 2 回定義しているのがいやんな感じ
    • でも、groupby に渡す前にキーでソートされていないとグルーピングされない
    • かつ、groupby でもキーの計算方法を教えてやらないといけない
    • ということで 2 回指定しないといけないのでは
  • グルーピングされたものもイテレータで返ってくるよ

ふーん。