コンテナとして1.Counters、あなたは同じ値が何倍に増加し追跡することができます。このクラスは、一般的に(バッグ)またはセット(マルチセット)のデータ構造は、アルゴリズムを実装パック他の言語を実装するために使用されてもよいです。
初期化
3初期化の形でカウンターサポート。コンストラクタカウンターまたはキーとカウントを備えた辞書を呼び出すときの要素の順序を提供することができる、またカウントする文字列名のキーワードパラメータをマッピングするために使用することができます。
インポートコレクションは
(collections.Counter([ ''、 'B'、 'C'、 ''、 'B'、 'C']))印刷します
プリント(collections.Counter({ '':2、 'B':3、 'C':1})) プリント(collections.Counter(= 2、B = 3、C = 1))
あなたが任意のパラメータを指定しない場合は、nullカウンター、およびupdate()を充填することによって、メソッドを構築することができます。
インポートコレクション C = collections.Counter() プリント( '間隔:'、C) c.update( 'abcdaab') プリント( '配列'、C) c.update({ '':1、 'D':5 })
新しいカウント値データの増加ではなく、代替データ変更カウント。
間隔:カウンタ() シーケンスカウンタ({ '':3、 'B':2 'C':1、 'D':1}) dictの:カウンタ({ 'D':6 '':4 、 'B':2 'C':1})
アクセス数
カウンターを満たしたら、彼の値を取得するために辞書APIを使用することができます。
C = collections.Counter( 'abcdaab') 'ABCDE'の文字のために: プリント( '%1:%D' %(手紙、C [手紙]))
未知の要素のうち、カウンターノーKeyError例外。値は、入力の(この例のようにe)に見つからない場合、0としてカウントされます。
:3 B:2 C:1つの D:1つ のE:0
要素()メソッドは、カウンタ既知のすべての要素を生成するイテレータを返します。
C = collections.Counter( '非常') C [ 'Z'] = 0 プリント(C) プリント(リスト(c.elements()))
同じ要素の順序を保証しない、素子さらにカウンタ未満又は0に等しいが含まれていませんです。
カウンタ({ 'E':3、 'X':1、 'T' 1、R '':1、 'M':1、 'L':1、 'Y' 1、Z '':0 }) [ 'E'、 'E'、 'E'、 'X'、 'T'、R ''、 'M'、 'L'、 'Y']
使用most_common()は、最も頻繁に遭遇すると、対応するカウントを含むN個の入力値のシーケンスを生成することができます。
C = collections.Counter() オープン( 'words.text'、 'RT')Fとして有する: Fの行のための: (。line.rstrip()下())c.update プリント( '最も一般的:') 手紙のために、数のc.most_common(3): プリント( '%sの:%7D' %(文字カウント))
この単語のすべての文字は、周波数分布を生成するために、統計的なシステムの一例であること、そして最も一般的な3つの文字を印刷するのに表示されます。いかなるパラメータ)(most_commonないようにした場合、構成するすべての要素のリストを生成します。周波数に配置されました。
最も一般的な: O:15 J:12 D:10
算数操作
カウンターの例は、完全にサポートに算術演算を設定し、その結果を集計します。
C1 = collections.Counter([ ''、 'B'、 'C'、 ''、 'B'、 'B']) C2 = collections.Counter( 'アルファベット') プリント( 'C1'、C1 ) プリント( 'C2'、C2) プリント( '\ nCombined数:') プリント(C1 + C2) プリント( '\ nSubtraction:') プリント(C1 - C2) プリント( '\ nIntersection(正の最小値を取ります): ') プリント(C1&C2) プリント(' \ nUnion(最大値を取る): ') プリント(C1 | C2)
新しいカウンターは、一回の操作によって発生するたびに、カウントが0または負の要素が削除されます。C1とC2で同じカウントするので、0を差し引いた後の彼のカウントいます。
C1:カウンタ({ 'B':3 '':2 'C':1}) C2:カウンタ({ '':2、 'L':1、 'P':1、 'H' :1、 'B':1、 'E':1、 'T':1}) 組み合わせカウント: カウンタ({ '':4 'B':4 'C':1、 'L': 1、 'P':1、 'H':1、 'E':1、 'T':1}) 減算: カウンタ({ 'B':2 'C':1}) 交差点(正の最小値を取ります): カウンタ({ '':2、 'B':1}) ユニオン(最大値をとる): カウンタ({ 'B':3 '':2 'C':1、 'L' 1 、 'P':1、 'H':1、 'E':1、 'T':1})
2.defaultdict。標準の辞書には値が存在しない場合は、値を取得し、デフォルト値を作成するには、メソッドには、SetDefault()を含んでいます。これとは対照的に、defaultdict初期化コンテナは、呼び出し側が事前にデフォルト値を指定できます。
DEF default_factory(): 戻り'デフォルト値' D = collections.defaultdict(default_factory、FOO = 'バー') プリント( 'D'、D) 印刷( 'FOO =>'、D [ 'FOO']) (印刷」バー=>」、D [ 'バー'])
限り、すべてのキーを持っているのと同じデフォルト値が不適切ではありません。あなたは、このメソッドを使用することができます。などの集計や累積値の型のデフォルト値は、場合:リスト、セット、さらにはint型、この方法は特に便利です。
D defaultdict(<0x00000000024F9DC8における関数default_factory>、{ 'FOO': 'バー'}) FOO =>バー バー=>デフォルト値
3.deque。(両端キュー)のサポート追加し、任意の期間から削除要素。より一般的な二つの構造、即ち、スタックとキューは、入力と出力制限期間において、劣化フォーム両端キューです。
D = collections.deque( 'ABCDEFG') 、印刷( 'のDeque:'、D) 印刷( '長さ'、lenの(d)参照) 、印刷( '左の端:'、D [0]) 、印刷( '右端。 」、D [-1]) d.remove( 'C') プリント( '削除(C):'、D)
一部の操作は、シーケンス両端キュー容器であるため、リストはまた、(__ __getitemと同様に、支持体)マッチング時間によって内容、長さ、および中間配列から削除エレメントをチェック。
両端キュー:両端キュー([ ''、 'B'、 'C'、 'D'、 'E'、 'F'、 'G']) 長さ:7 左の端: 右エンド:Gの 削除(C):両端キュー([ ''、 'B'、 'D'、 'E'、 'F'、 'G'])
充填
両端キューは、いずれの端部から充填することができる、あなたは、左右のパディングを充填することができます。
右へ#Add D1 = collections.deque() d1.extend( 'ABCDEFG') :プリント(D1 '伸びる') d1.append( 'H') :(D1 'APPEND')印刷 に#Add左 D2 = collections.deque() d2.extendleft(レンジ(6)) プリント( 'extendleft:'、D2) d2.appendleft(6) プリント( 'appendleft:'、D2)
extendleft()は、その入力の関数反復プロセス、完成及びappendleft(の各要素に対して同様の処理)。最終結果は、入力シーケンスの逆順を含む両端キューです。
延び:両端キュー([ ''、 'B'、 'C'、 'D'、 'E'、 'F'、 'G']) 追記:両端キュー([ ''、 'B'、 'C' 、 'D'、 'E'、 'F'、 'G'、 'H']) extendleft:両端キュー([5、4、3、2、1、0]) appendleft:両端キュー([6、5、4 、3、2、1、0])
利用
同様に、アルゴリズムに応じて両端キューいずれかの末端または両方の末端からの要素の使用は、適用されます。
印刷( '右から:') 、D = collections.deque( 'ABCDEFG') 真中: 試してみる: プリント(d.pop()) はIndexErrorを除き: ブレーク プリント( '\ Nfromを左:') D =コレクション。両端キュー(レンジ(6)) しばらく真: :試し プリント(d.popleft()) はIndexErrorを除き: ブレーク
使用ポップ(0は両端キューの左端から要素を削除することができpopleft()を使用して両端キューの右端から要素を除去することができます。
:右から G 、F 、Eの Dの C B :左から 0 1 2 3 4 5
両端キューは、スレッドセーフであるので、それは別のスレッドでキューの内容を使用して、両端から同時にも可能です。