Pythonコレクションモジュール:Counter、ChainMap、Deque&Tuple

公開: 2020-12-01

Pythonコレクションモジュールは、リスト、タプル、セット、辞書などのストックコンテナの機能を拡張する一連のコンテナデータ型を提供します。 これらの特別なコンテナを使用すると、ストックコンテナの機能だけでなく、特定のタスクに非常に役立ついくつかの追加のメソッドも利用できます。

このチュートリアルを終了するまでに、次の知識が身に付きます。

  • コレクションモジュールとは何ですか?
  • のようなさまざまな機能:
  1. カウンター
  2. チェーンマップ
  3. Deque
  4. 名前付きタプル
  • 実例

コレクションモジュールはPythonにプリインストールされているため、pipインストールする必要はありません。 インポートするだけで準備完了です。 最もよく使われる関数について詳しく見ていきましょう。

世界のトップ大学からデータサイエンス学びましょう。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを早急に進めましょう。

必読:実世界での魅力的なPythonアプリケーション

目次

カウンター

カウンターコレクションモジュールで最もよく使用され、最も役立つ機能です。 Counterは、Pythonの辞書クラスのサブクラスです。 iterable(文字列、タプル、リストなど)内の各要素の出現回数をカウントし、辞書に格納します。 ディクショナリキーはイテラブル内の一意の要素であり、値はそれらの要素の数です。

いくつかの例で試してみましょう。

コレクションをインポートする
マーベル= '悪いウルヴァリンいじめられた貧しいアイアンマン悪いウルヴァリン貧しい貧しいアイアンマン'
Marvel_count = collections.Counter(Marvel.split())

#出力:
Counter({ '悪い' 3
「鉄」 2
「男」 2
「悪い」 2
'ウルヴァリン' 2
'いじめられた' 1 })

ご覧のとおり、すべての要素の出現回数をカウントし、辞書に入れました。 これは、あらゆるタイプの反復可能で使用できます。 それでは、すべてのメソッドが何であるかを見てみましょう。

Marvel_count[ '悪い' ]
#>> 3

Marvel_count.values()
#>> dict_values([3、2、1、2、2、2])

Marvel_count.keys()
#>> dict_keys(['Bad'、'Wolverine'、'bullied'、'Iron'、'Man'、'Poor'])

most_common(n)メソッドは、カウントの降順で並べられたn個の最も一般的な要素のリストを返します。

Marvel_count.most_common( 2
#>> [('悪い'、3)、('ウルヴァリン'、2)]

チェーンマップ

ChainMapは、多くの辞書の単一のビューを作成するために使用されます。これにより、単一のビュー、つまり、ChainMapオブジェクト自体からアクセスおよび更新できます。 これらのChainMapは実際の辞書への参照のみで構成されており、更新は実際の辞書自体でも行われることに注意してください。

ChainMapはディクショナリクラスの拡張であるため、すべてのディクショナリメソッドに加えて、これから説明するいくつかの追加メソッドがサポートされます。

dic1 = { 'a' 1 'b' 2 }
dic2 = { 'b' 3 'c' 4 } Dic3 = { 'b' 9 'd' 4 }
chain1 = collections.ChainMap(dic2、dic1)
チェーン1

上記のコードでは、2つの辞書dic1とdic2を定義し、それらをChainMapオブジェクトに配置します。

#出力:
ChainMap({ 'b' 3 'c' 4 }、{ 'a' 1 'b' 2 })

ご覧のとおり、 dic2はこの順序でdic1と「チェーン」されています。 本質的に、dic2がdic2–>dic1のようにdic1に接続されていることを想像できます。 したがって、キー'b'を検索すると、最初にdic2である最初のマッピングが検索され、キーが見つからない場合は、次のマッピングに進みます。

したがって、ChainMapの順序は、どのマッピングが最初に検索されるかを決定するために重要です。 それが実際に動いているのを見てみましょう。

chain1 [ 'b' ]
#>> 3

上記のように、ChainMapには両方の辞書にキー「b」があります。 したがって、キー'b'を検索すると、最初のマッピングであるdic2が検索され、値が返されます。

マップ属性

マップ属性ChainMapは、検索順にマッピングのリストを返します。つまり、dic2はマップの最初にあるため、最初に検索されます。

chain1.maps
#>> [{'b':3、'c':4}、{'a':1、'b':2}]

同様に、キーと値を確認できます。

list(chain1.keys())
#>> ['a'、'c'、'b']

list(chain1.values())
#>> [1、4、3]

ご覧のとおり、一意のキーと値のみが表示されています。

new_child(m = None)

new_child()メソッドは、ChainMapに新しいマップを追加するために使用されます。 このメソッドは、新しいマップを最初のマップとして、その後に残りのマップを含む新しいチェーンマップを返します。 mを指定すると、それが最初のマップになります。それ以外の場合は、空の辞書が最初のマップとして追加されます。

chain1.new_child(dic3)
chain1.maps

#出力:
[{ 'b' 9 'd' 4 }、{ 'b' 3 'c' 4 }、{ 'a' 1 'b' 2 }]

ご覧のとおり、最初にdic3を追加し、新しいChainMapオブジェクトを返しました。

逆転

チェーンマップの順序をどのように変更できるのか疑問に思われるかもしれません。 これは、ChainMapを逆方向に反復するためのイテレーターを返すreverse関数を使用して実現できます。 これを実際に見てみましょう。

キー「b」がすべてのマップに含まれるようになりました。 ChainMapの最初のマップには、値が9のキー「b」があります。

chain1 [ 'b' ]
#>> 9

逆方向に反復するとどうなるか見てみましょう。

chain1.maps = reverse(chain1.maps)
chain1 [ 'b' ]
#>> 2

逆関数は実際にはマッピングを逆にするのではなく、逆イテレータを提供するだけであることに注意してください。

読む: Pythonチュートリアル

Deque

Deque( 「deck」と発音)はリストの拡張ですが、両端キューです。 Dequeの略:すべての操作が右側にあるリストとは異なり、Dequeの両端の要素を効率的に削除/ポップおよび追加できるため、両端キュー。

deque(iterable、maxlen)は、iterableを取り込み、dequeオブジェクトを返します。 また、要素数の上限を決定するmaxlenパラメーターもあります。 指定しない場合、dequeは無期限に大きくなる可能性があります。 そのきびきびとした方法を見てみましょう。

deq = collections.deque [ 1、2、3、4、5 ] maxlen = 6 _
deq.appendleft( 8

#出力:
deque [ 8、1、2、3、4、5 ] _ _ _ _ _ _ _

ご覧のとおり、 appendleftメソッドを呼び出すと、左端に要素が追加されます。 さらに、現在到達しているmaxlenを6として初期化したため、別の要素を追加すると「StopIterationError」がスローされます。

それでは、 popleftを使用して左端の要素を削除しましょう

deq.popleft()
#>> 8

removeを使用して、値によって特定の要素を削除することもできます

deq.remove( 5
#>> deque([1、2、3、4])

注:dequeにない要素を指定してremoveメソッドを呼び出すと、「ValueError」がスローされます。

insert(index、element)を使用して、指定したインデックスに任意の要素を挿入できます

deq.insert 2、7 _
#>> deque([1、2、7、3、4])

dequeは、 reverseメソッドを呼び出すことで元に戻すことができます。

deq.reverse()
#>> deque([4、3、7、2、1])


Dequeは、 rotateメソッドを使用して時計回りまたは反時計回りに回転することもできます

#時計回りdeq.rotate( 2 #>> deque([2、1、4、3、7])

#反時計回りdeq.rotate( -2 #>> deque([4、3、7、2、1])

名前付きタプル

namedtuple()は、Pythonの通常のタプルオブジェクトを大幅に改良したものです。 名前付きタプルを使用すると、位置だけでなく名前で要素にインデックスを付けることができます。 名前付きタプルはテーブルと考えることができ、テーブル名はタプル名、列名はインデックス名と見なすことができます。 名前付きタプルは、基本的に各要素に意味を割り当てて、アクセスを容易にし、コードを読みやすくします。

いくつかの例を取り上げて、それがどのように機能するかを理解しましょう。

Performance = collections.namedtuple( 'Employee_Rating' 、[ 'Q1' 'Q2' 'Q3' 'Q4' ])

上記のコードでは、「Employee_Rating」という名前の名前付きタプルオブジェクト「Performance」を定義しました。フィールド名は「Q1」、「Q2」、「Q3」、「Q4」で、従業員の四半期評価を格納します。 Employee_Ratingの2つの名前付きタプルエントリを作成しましょう。

rahul = Performance 3、4、3.5、4.5 _ _ _
ankit = Performance 4、4.5、4、4.5 _ _ _

#出力:
Employee_Rating(Q1 = 4 、Q2 = 4.5 、Q3 = 4 、Q4 = 4.5
Employee_Rating(Q1 = 3 、Q2 = 4 、Q3 = 3.5 、Q4 = 4.5


2つのエントリを作成したので、インデックス名でそれらにアクセスできます。

ankit.Q1
#>> 4

ankit.Q3> rahul.Q3
#>> True


新しいエントリを追加したり、新しい名前付きタプルオブジェクトを作成したりするには、 _make()メソッドを使用できます。

ミルカ= Performance._make [ 4、5、5、4.5 ] _
ミルカ

#出力:
Employee_Rating(Q1 = 4 、Q2 = 5 、Q3 = 5 、Q4 = 4.5

名前付きタプルで_replaceメソッドを使用して、要素を編集できます

rahul._replace(Q1 = 2

#出力:
Employee_Rating(Q1 = 2 、Q2 = 4 、Q3 = 3.5 、Q4 = 4.5

行く前に

コレクションモジュールには、OrderedDict、defaultdict、UserList、UserString、UserDictなどの便利な関数がいくつかあります。 このチュートリアルで説明した機能を必ず理解してください。 これらのコンテナタイプは、作業を楽にするだけでなく、作成するコードの品質も向上させます。

python、データサイエンスについて知りたい場合は、IIIT-BとupGradのデータサイエンスのエグゼクティブPGプログラムをご覧ください。これは、働く専門家向けに作成され、10以上のケーススタディとプロジェクト、実践的なハンズオンワークショップ、業界の専門家とのメンターシップを提供します。 、業界のメンターと1対1で、400時間以上の学習とトップ企業との仕事の支援。

収集モジュールとは何ですか、そしてそれはどのように役立ちますか?

Pythonのコレクションモジュールは、いくつかのタイプのコンテナをサポートしています。 コンテナは、さまざまなアイテムを格納し、囲まれたオブジェクトを取得して反復する手段を提供するために使用されるオブジェクトです。 タプル、リスト、ディクショナリ、およびその他の組み込みコンテナが利用可能です。 また、Collectionsモジュールには、namedtuple()、deque、OrderedDict、counterなどの高度に特殊化された効率的なコンテナーデータ型があり、標準のPythonコンテナーよりもはるかに優れています。

コレクションモジュールはPythonに必要なトピックですか?

はい、コレクションモジュールはPythonを学習する際に必要なトピックです。 Pythonのコレクションモジュールを使用すると、オブジェクトのカウント、キューとスタックの構築、辞書で欠落しているキーの管理などをすべて行うことができます。 コレクションのデータ型とクラスは、効率的でPythonicになるように作成されています。 これらはPythonプログラミングのキャリアにとって非常に価値があるため、このコレクションモジュールについて学ぶために時間を割くことは、時間と労力の価値が十分にあります。 コレクションモジュールのコンテナは、ビジネスレベルのプロジェクトやモデルにとって非常に有益であり、最適化と実行速度の向上により、汎用Pythonコンテナの有用性が大幅に向上します。

収集モジュールに存在するデータ型は何ですか?

収集モジュールには、deque、defaultdict、namedtuple、OrderedDict、Counter、ChainMap、UserDict、UserList、UserStringなど、いくつかのデータ型があります。これらのデータ型は、アイテムの追加や削除など、さまざまな理由で使用できます。シーケンスの終わり、欠落しているキーのデフォルト値を作成し、それらを辞書に自動的に追加します。 これらのデータ型は、インデックスでアイテムにアクセスする機能を維持しながら、名前でアイテムにアクセスできる名前付きフィールドを提供したり、シーケンス内または反復可能な一意のアイテムをカウントしたり、複数のマッピングを単一のディクショナリオブジェクトとして処理したりすることでも役立ちます。