Python3 collectionsモジュールの色々

Facebook にシェア
Pocket
LINEで送る
このエントリーを Google ブックマーク に追加

collectionsモジュールの用途は広いため、一例を紹介。

Counterメソッド

Counterメソッドは、引数のリストの要素の個数をカウントし、カウントが多い順に要素とカウントのペアを返す。

In [1]: from collections import Counter

In [2]: a = [1, 2, 3, 4, 1, 2, 5, 4, 1, 2, 3, 3, 3, 5]

In [3]: Counter(a).most_common()
Out[3]: [(3, 4), (1, 3), (2, 3), (4, 2), (5, 2)]

逆に、Counterメソッドから要素と個数を指定してリストを作成することもできる。

In [1]: from collections import Counter

In [2]: a = Counter(a=4, b=3, c=0, d=-1, e=2)

In [3]: list(a.elements())
Out[3]: ['a', 'a', 'a', 'a', 'e', 'e', 'b', 'b', 'b']

 

OrderedDictメソッド

通常、pythonの辞書式変数は要素を追加しても順序が保たれずにソートされてしまう。

In [1]: dic = dict(a=1, c=2)

In [2]: dic['b'] = 3

In [3]: dic
Out[3]: {'a': 1, 'b': 3, 'c': 2}

そこでOrderedDictメソッドを使うことで、順序が保たれたまま辞書式変数と同様の実装ができる。

In [1]: from collections import OrderedDict

In [2]: dic = OrderedDict((('a', 1), ('c', 2)))

In [3]: dic['b'] = 3

In [4]: dic
Out[4]: OrderedDict([('a', 1), ('c', 2), ('b', 3)])

 

namedtupleメソッド

namedtupleはひとつの変数に複数の属性を実装したいときに便利。
クラス内に変数を作成したときのように扱うことができる。

In [1]: from collections import namedtuple

In [2]: Point = namedtuple('Point', ['x', 'y'])

In [3]: Point.x = 10

In [4]: Point.y = 20

In [5]: Point.x, Point.y
Out[5]: (10, 20)

 

defaultdictメソッド

defaultdictメソッドは配列の同じ値を持つ要素をグループにして出力する。

In [1]: from collections import defaultdict

In [2]: a = [('red', 1), ('blue', 2), ('red', 3), ('green', 4), ('green',5)]

In [3]: d = defaultdict(list)

In [4]: for k,v in a:
   ...:     d[k].append(v)
   ...:

In [5]: list(d.items())
Out[5]: [('blue', [2]), ('red', [1, 3]), ('green', [4, 5])]

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です