35
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

意外と知られていない!? Python標準ライブラリの関数groupby

Last updated at Posted at 2016-09-22

Python標準ライブラリのモジュール itertools はイテレータを扱う便利な関数が提供されています。
その中でも groupby はよく使う機会が多いのですが、以外と知らない人も多いようなので紹介します。

groupby

iterable(リストやイテレータなど)を任意のキーでグルーピングする関数です。
戻り値はキーとキーに属する要素のイテレータになります。

groupbyに渡すiterableは同じキーの要素が連続していなければならないので、事前にソートする必要があります。

基本的な使い方

説明だけだとイメージがつきにくいので簡単なサンプルを見てみましょう。

文字と数値のタプルを要素とするリストを、文字でグルーピングする例です。

from itertools import groupby
from operator import itemgetter

a = [("b", 3), ("a", 1), ("c", 2), ("a", 2), ("b", 1)]
a = sorted(a, key=itemgetter(0))

for (k, g) in groupby(a, key=itemgetter(0)):
    print("key:" + k)
    for item in g:
        print(item)
実行結果
key:a
('a', 1)
('a', 2)
key:b
('b', 3)
('b', 1)
key:c
('c', 2)

ソートしないでgroupbyを使うと次のようになってしまいます。

ソートしないで実行すると...
key:b
('b', 3)
key:a
('a', 1)
key:c
('c', 2)
key:a
('a', 2)
key:b
('b', 1)
35
33
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?