Python カウンター: collections.Counter の使用方法?
1. はじめに
カウンター ツールは高速で便利なカウントを提供します。カウンターは dict のサブクラスであり、ハッシュ可能なオブジェクトをカウントするために使用されます。これは、辞書キーのように格納された要素とその数を値として含むコレクションです。カウントには、0 や負の数を含む任意の整数値を指定できます。Counter クラスは、他の言語のバッグやマルチセットに似ています。簡単に言うと統計的に数えることができるので、いくつか例を見てみましょう。
例:
#计算top10的单词 from collections import Counter import re text = 'remove an existing key one level down remove an existing key one level down' words = re.findall(r'\w+', text) Counter(words).most_common(10) [('remove', 2),('an', 2),('existing', 2),('key', 2),('one', 2)('level', 2),('down', 2)] #计算列表中单词的个数 cnt = Counter() for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']: cnt[word] += 1 cnt Counter({'red': 2, 'blue': 3, 'green': 1}) #上述这样计算有点嘛,下面的方法更简单,直接计算就行 L = ['red', 'blue', 'red', 'green', 'blue', 'blue'] Counter(L) Counter({'red': 2, 'blue': 3, 'green': 1}
要素は反復可能からカウントされるか、他のマッピング (またはカウンター) から初期化されます:
from collections import Counter #字符串计数 Counter('gallahad') Counter({'g': 1, 'a': 3, 'l': 2, 'h': 1, 'd': 1}) #字典计数 Counter({'red': 4, 'blue': 2}) Counter({'red': 4, 'blue': 2}) #计数 Counter(cats=4, dogs=8) Counter({'cats': 4, 'dogs': 8}) Counter(['red', 'blue', 'red', 'green', 'blue', 'blue']) Counter({'red': 2, 'blue': 3, 'green': 1})
2. 基本操作
1. 統計"反復可能なシーケンス内の各要素の出現数"
1.1 リスト/文字列への影響
次の 2 つの使用方法があります。1 つは直接使用する方法、もう 1 つはインスタンス化する方法です。頻繁に呼び出したい場合は、Counter のさまざまなメソッドを簡単に呼び出すことができ、同じルーチンが他の反復可能なシーケンスに使用されるため、明らかに後者の方が簡潔です。
#首先引入该方法 from collections import Counter #对列表作用 list_01 = [1,9,9,5,0,8,0,9] #GNZ48-陈珂生日 print(Counter(list_01)) #Counter({9: 3, 0: 2, 1: 1, 5: 1, 8: 1}) #对字符串作用 temp = Counter('abcdeabcdabcaba') print(temp) #Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1}) #以上其实是两种使用方法,一种是直接用,一种是实例化以后使用,如果要频繁调用的话,显然后一种更简洁
1.2 結果の出力
#查看类型 print( type(temp) ) #<class 'collections.Counter'> #转换为字典后输出 print( dict(temp) ) #{'b': 4, 'a': 5, 'c': 3, 'd': 2, 'e': 1} for num,count in enumerate(dict(temp).items()): print(count) """ ('e', 1) ('c', 3) ('a', 5) ('b', 4) ('d', 2) """
1.3 組み込みの items() メソッドを使用して出力
この方法は、辞書に変換して出力するよりも明らかに便利です。 :
print(temp.items()) #dict_items([('e', 1), ('c', 3), ('b', 4), ('d', 2), ('a', 5)]) for item in temp.items(): print(item) """ ('a', 5) ('c', 3) ('d', 2) ('e', 1) ('b', 4) """
2. most_common() は、最も多く出現する要素をカウントします
most_common() メソッドを使用して、n 個の最も一般的な要素と出現数を順番に含むリストを返します。一般性の低い順に並べ替えます。 n が省略されている場合、または None の場合、most_common() はカウンター内のすべての要素を返します。等しいカウント値を持つ要素は、最初に出現した順にソートされます。上位の単語頻度を計算するためによく使用される単語:
#求序列中出现次数最多的元素 from collections import Counter list_01 = [1,9,9,5,0,8,0,9] temp = Counter(list_01) #统计出现次数最多的一个元素 print(temp.most_common(1)) #[(9, 3)] 元素“9”出现3次。 print(temp.most_common(2)) #[(9, 3), (0, 2)] 统计出现次数最多个两个元素 #没有指定个数,就列出全部 print(temp.most_common()) #[(9, 3), (0, 2), (1, 1), (5, 1), (8, 1)]
Counter('abracadabra').most_common(3) [('a', 5), ('b', 2), ('r', 2)] Counter('abracadabra').most_common(5) [('a', 5), ('b', 2), ('r', 2), ('c', 1), ('d', 1)]
3. elements() および sort() メソッド
説明: 各要素がカウント値で指定された回数だけ繰り返される反復子を返します。要素は最初に出現した順に返されます。要素の数が 1 未満の場合、elements() はそれを無視します。
例:
c = Counter(a=4, b=2, c=0, d=-2) list(c.elements()) ['a', 'a', 'a', 'a', 'b', 'b'] sorted(c.elements()) ['a', 'a', 'a', 'a', 'b', 'b'] c = Counter(a=4, b=2, c=0, d=5) list(c.elements()) ['a', 'a', 'a', 'a', 'b', 'b', 'd', 'd', 'd', 'd', 'd']
from collections import Counter c = Counter('ABCABCCC') print(c.elements()) #<itertools.chain object at 0x0000027D94126860> #尝试转换为list print(list(c.elements())) #['A', 'A', 'C', 'C', 'C', 'C', 'B', 'B'] #或者这种方式 print(sorted(c.elements())) #['A', 'A', 'B', 'B', 'C', 'C', 'C', 'C'] #这里与sorted的作用是: list all unique elements,列出所有唯一元素 #例如 print( sorted(c) ) #['A', 'B', 'C']
公式ドキュメントの例:
# Knuth's example for prime factors of 1836: 2**2 * 3**3 * 17**1 prime_factors = Counter({2: 2, 3: 3, 17: 1}) product = 1 for factor in prime_factors.elements(): # loop over factors product *= factor # and multiply them print(product) #1836 #1836 = 2*2*3*3*3*17
4.subtract() 減算演算: 出力は、結果が 0 または 0 未満であるカウントを無視しません
反復可能なオブジェクトまたはマップされたオブジェクトから要素を減算します。入力と出力は両方とも 0 または負の値にすることができます。
c = Counter(a=4, b=2, c=0, d=-2) d = Counter(a=1, b=2, c=3, d=4) c.subtract(d) c Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6}) #减去一个abcd str0 = Counter('aabbccdde') str0 Counter({'a': 2, 'b': 2, 'c': 2, 'd': 2, 'e': 1}) str0.subtract('abcd') str0 Counter({'a': 1, 'b': 1, 'c': 1, 'd': 1, 'e': 1}
subtract_test01 = Counter("AAB") subtract_test01.subtract("BCC") print(subtract_test01) #Counter({'A': 2, 'B': 0, 'C': -2})
ここでのカウントはゼロに減らすことができ、ゼロと負の数を含めることができます:
subtract_test02 = Counter("which") subtract_test02.subtract("witch") #从另一个迭代序列中减去元素 subtract_test02.subtract(Counter("watch")) #^…… #查看结果 print( subtract_test02["h"] ) # 0 ,whirch 中两个,减去witch中一个,减去watch中一个,剩0个 print( subtract_test02["w"] ) #-1
5. ディクショナリ メソッド
通常、ディクショナリ メソッドは Counter オブジェクトに使用できます。ただし、辞書とは異なる動作をするメソッドが 2 つあります。
fromkeys(iterable): このクラス メソッドは Counter には実装されていません。
update([iterable-or-mapping]): 反復可能オブジェクトから要素をカウントするか、別のマッピング オブジェクト (またはカウンター) から追加すると、要素の数が追加されます。さらに、反復オブジェクトは (キー、値) ペアではなく、シーケンス要素である必要があります。
sum(c.values()) # total of all counts c.clear() # reset all counts list(c) # list unique elements set(c) # convert to a set dict(c) # convert to a regular dictionary c.items() # convert to a list of (elem, cnt) pairs Counter(dict(list_of_pairs)) # convert from a list of (elem, cnt) pairs c.most_common(n) # n least common elements +c # remove zero and negative counts
6. 数学的演算
この関数は非常に強力で、Counter オブジェクトと組み合わせてマルチセット (0 より大きい要素) を生成できるいくつかの数学的演算を提供します。カウンター )。加算と減算では、対応する要素の数を加算または減算してカウンターを結合します。 Intersection と Union は、対応するカウントの最小値または最大値を返します。各操作は符号付きカウントを受け入れますが、出力では結果が 0 または 0 未満のカウントは無視されます。
c = Counter(a=3, b=1) d = Counter(a=1, b=2) c + d # add two counters together: c[x] + d[x] Counter({'a': 4, 'b': 3}) c - d # subtract (keeping only positive counts) Counter({'a': 2}) c & d # intersection: min(c[x], d[x]) Counter({'a': 1, 'b': 1}) c | d # union: max(c[x], d[x]) Counter({'a': 3, 'b': 2})
print(Counter('AAB') + Counter('BCC')) #Counter({'B': 2, 'C': 2, 'A': 2}) print(Counter("AAB")-Counter("BCC")) #Counter({'A': 2})
And" および "OR" 演算:
print(Counter('AAB') & Counter('BBCC')) #Counter({'B': 1}) print(Counter('AAB') | Counter('BBCC')) #Counter({'A': 2, 'C': 2, 'B': 2})
一方向加算および減算 (単項演算子) は、空のカウンタに加算または減算することを意味します。これは、カウント値に正の値を乗算することと同等です。または負の値の場合、出力では、結果が 0 または 0 未満であるカウントも無視されます:
c = Counter(a=2, b=-4) +c Counter({'a': 2}) -c Counter({'b': 4})
テキストの類似性、重み付けされた類似性を計算するアルゴリズムを作成します:
def str_sim(str_0,str_1,topn): topn = int(topn) collect0 = Counter(dict(Counter(str_0).most_common(topn))) collect1 = Counter(dict(Counter(str_1).most_common(topn))) jiao = collect0 & collect1 bing = collect0 | collect1 sim = float(sum(jiao.values()))/float(sum(bing.values())) return(sim) str_0 = '定位手机定位汽车定位GPS定位人定位位置查询' str_1 = '导航定位手机定位汽车定位GPS定位人定位位置查询' str_sim(str_0,str_1,5) 0.75
7. 合計を計算します。要素の数、Keys() および Values()
from collections import Counter c = Counter('ABCABCCC') print(sum(c.values())) # 8 total of all counts print(c.keys()) #dict_keys(['A', 'B', 'C']) print(c.values()) #dict_values([2, 2, 4])
8. 単一要素の結果のクエリ
from collections import Counter c = Counter('ABBCC') #查询具体某个元素的个数 print(c["A"]) #1
9. Add
for elem in 'ADD': # update counts from an iterabl c[elem] += 1 print(c.most_common()) #[('C', 2), ('D', 2), ('A', 2), ('B', 2)] #可以看出“A”增加了一个,新增了两个“D”
10. 削除 (del)
del c["D"] print(c.most_common()) #[('C', 2), ('A', 2), ('B', 2)] del c["C"] print(c.most_common()) #[('A', 2), ('B', 2)]
11. update update()
d = Counter("CCDD") c.update(d) print(c.most_common()) #[('B', 2), ('A', 2), ('C', 2), ('D', 2)]
12. Clear Clear()
c.clear() print(c) #Counter()
3. Summary
Counter は dict のサブクラスで、主にアクセスするために使用されます。オブジェクトの頻度がカウントされます。
一般的に使用されるメソッド:
elements(): オブジェクトの数がカウントされている場合、各要素の反復計算回数である反復子を返します。要素 1 未満の場合は無視されます
most_common([n]): 最も頻繁にアクセスされる n 個の要素とその数を提供するリストを返します
-
subtract([iterable-or-mapping]): 反復可能なオブジェクトから要素を減算します。入力と出力は 0 または負の数値にすることができますが、これはマイナス記号の役割とは異なります -
update ([iterable-or-mapping]): 反復可能オブジェクトから要素をカウントするか、別のマッピング オブジェクト (またはカウンター) から追加します。
例:
# 统计字符出现的次数 >>> import collections >>> collections.Counter('hello world') Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1}) # 统计单词数 >>> collections.Counter('hello world hello world hello nihao'.split()) Counter({'hello': 3, 'world': 2, 'nihao': 1})
一般的に使用される方法:
>>> c = collections.Counter('hello world hello world hello nihao'.split()) >>> c Counter({'hello': 3, 'world': 2, 'nihao': 1}) # 获取指定对象的访问次数,也可以使用get()方法 >>> c['hello'] 3 >>> c = collections.Counter('hello world hello world hello nihao'.split()) # 查看元素 >>> list(c.elements()) ['hello', 'hello', 'hello', 'world', 'world', 'nihao'] # 追加对象,或者使用c.update(d) >>> c = collections.Counter('hello world hello world hello nihao'.split()) >>> d = collections.Counter('hello world'.split()) >>> c Counter({'hello': 3, 'world': 2, 'nihao': 1}) >>> d Counter({'hello': 1, 'world': 1}) >>> c + d Counter({'hello': 4, 'world': 3, 'nihao': 1}) # 减少对象,或者使用c.subtract(d) >>> c - d Counter({'hello': 2, 'world': 1, 'nihao': 1}) # 清除 >>> c.clear() >>> c Counter()
以上がPython カウンター: collections.Counter の使用方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

PythonコードをSublimeテキストで実行するには、最初にPythonプラグインをインストールし、次に.pyファイルを作成してコードを書き込み、Ctrl Bを押してコードを実行する必要があります。コードを実行すると、出力がコンソールに表示されます。

Visual Studioコード(VSCODE)でコードを作成するのはシンプルで使いやすいです。 VSCODEをインストールし、プロジェクトの作成、言語の選択、ファイルの作成、コードの書き込み、保存して実行します。 VSCODEの利点には、クロスプラットフォーム、フリーおよびオープンソース、強力な機能、リッチエクステンション、軽量で高速が含まれます。

Golangは、パフォーマンスとスケーラビリティの点でPythonよりも優れています。 1)Golangのコンピレーションタイプの特性と効率的な並行性モデルにより、高い並行性シナリオでうまく機能します。 2)Pythonは解釈された言語として、ゆっくりと実行されますが、Cythonなどのツールを介してパフォーマンスを最適化できます。

メモ帳でPythonコードを実行するには、Python実行可能ファイルとNPPEXECプラグインをインストールする必要があります。 Pythonをインストールしてパスを追加した後、nppexecプラグインでコマンド「python」とパラメーター "{current_directory} {file_name}"を構成して、メモ帳のショートカットキー「F6」を介してPythonコードを実行します。
