初心者のためのpython入門

自分がつまづいたところやつまづきやすいところを中心に書いていきます。また、役に立つライブラリの紹介などをしていきます。

collections[1]

前書き

今回は、colllectionsライブラリを紹介します。collectionsライブラリには、以下の便利なデータ構造が用意されています。

  • namedtuple
  • deque
  • ChainMap
  • Counter
  • OrderDict
  • defaultdict

今回は、namedtuple・deque・ChainMapの3つについて紹介します。

namedtuple

namedtupleは、属性名によるアクセスを可能にしたtupleです。namedtupleは、クラスではなく、ファクトリ関数であるため使い方には少し注意が必要です。
端的に言うと、ファクトリ関数とは、あるクラスを返す関数です。詳しく知りたい方は、デザインパターンを調べると参考になります。

from collections import namedtuple
nt = namedtuple('Number', ('one', 'two', 'three')) # typenameというtupleのsubclassを返す
number = nt(*[1, 2, 3]) # インスタンスの作成 nt(1, 2, 3)と同じ意味
print(number.one, number.two, number.three) # 属性名でアクセス
one, two, three = number # アンパック
print(one, two, three)
1 2 3 # print(number.one, number.two, number.three)
1 2 3 # print(one, two, three)

deque

dequeは、双方向から値の出し入れが行えるlistのようなものです。

from collections import deque
d = deque(i for i in range(10))
print(d.pop(), d.popleft()) # d.popleft(): 最左端から値を出す
print(d)
d.append(0)
d.appendleft(9) # 最左端に値を入れる
print(d)
9 0 # print(d.pop(), d.popleft())
deque([1, 2, 3, 4, 5, 6, 7, 8]) # print(d)
deque([9, 1, 2, 3, 4, 5, 6, 7, 8, 0]) # print(d)

ChainMap

ChainMapは、複数の辞書やマッピングを連結できるデータ構造です。

from collections import ChainMap
number = ChainMap()
odd_number = {'one': 1, 'three': 3, 'five': 5}
even_number = {'two': 2, 'four': 4, 'six': 6}
number.update(odd_number)
number.update(even_number)
print(number)
ChainMap({'one': 1, 'three': 3, 'five': 5, 'two': 2, 'four': 4, 'six': 6}) # print(number)

new_childメソッドにより、dictのサブクラスのオブジェクトとdictのオブジェクトを一様に扱うことができます。

# 先程の例の続き
print(number['seven'])

class ExtendDict(dict):
    def __missing__(self, key):
        return f'{key} not found'
    def __repr__(self):
        return 'ExtendDict()'

ed = ExtendDict()
number = number.new_child(ed)
print(number)
print(number['seven'])
KeyError: 'seven' # print(number['seven'])
ChainMap(ExtendDict(), {'one': 1, 'three': 3, 'five': 5, 'two': 2, 'four': 4, 'six': 6}) # print(number)
seven not found # print(number['seven'])

最後に

お疲れ様でした。次回は、残りの3つについて紹介します。