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 回指定しないといけないのでは
- グルーピングされたものもイテレータで返ってくるよ
ふーん。