Search on the blog

2016年4月9日土曜日

便利なPythonライブラリ(2)itertools.groupby

 与えられたiterableをキーごとにgroupbyすることができる。
unixのuniqコマンドやC++ STLのuniqueと同様に、iterableは予めsortした状態で渡さなければならない。

 以下の例では、xs[i], ys[i]にi番目の点の座標が格納されているとして、x軸ごとにyの合計を計算している。
from itertools import groupby
from operator import itemgetter

def main():
    xs = [1,2,3,1,2,3,1,2,3]
    ys = [1,2,3,4,5,6,7,8,9]

    points = sorted(zip(xs, ys))
    for k,v in groupby(points, key=itemgetter(0)):
        print (k, sum(y for x,y in v))

if __name__ == '__main__':
    main()

0 件のコメント:

コメントを投稿