目次
1. はじめに
2. 基本操作
1. 統計"反復可能なシーケンス内の各要素の出現数"
2. most_common() は、最も多く出現する要素をカウントします
3. elements() および sort() メソッド
4.subtract() 減算演算: 出力は、結果が 0 または 0 未満であるカウントを無視しません
5. ディクショナリ メソッド
6. 数学的演算
7. 合計を計算します。要素の数、Keys() および Values()
8. 単一要素の結果のクエリ
9. Add
10. 削除 (del)
11. update update()
12. Clear Clear()
3. Summary
ホームページ バックエンド開発 Python チュートリアル Python カウンター: collections.Counter の使用方法?

Python カウンター: collections.Counter の使用方法?

May 08, 2023 pm 01:34 PM
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 &#39;collections.Counter&#39;>
     
    #转换为字典后输出
    print( dict(temp) ) #{&#39;b&#39;: 4, &#39;a&#39;: 5, &#39;c&#39;: 3, &#39;d&#39;: 2, &#39;e&#39;: 1}
     
    for num,count in enumerate(dict(temp).items()):
        print(count)
    """
    (&#39;e&#39;, 1)
    (&#39;c&#39;, 3)
    (&#39;a&#39;, 5)
    (&#39;b&#39;, 4)
    (&#39;d&#39;, 2)
    """
    ログイン後にコピー

    1.3 組み込みの items() メソッドを使用して出力

    この方法は、辞書に変換して出力するよりも明らかに便利です。 :

    print(temp.items()) #dict_items([(&#39;e&#39;, 1), (&#39;c&#39;, 3), (&#39;b&#39;, 4), (&#39;d&#39;, 2), (&#39;a&#39;, 5)])
     
    for item in temp.items():
        print(item)
    """
    (&#39;a&#39;, 5)
    (&#39;c&#39;, 3)
    (&#39;d&#39;, 2)
    (&#39;e&#39;, 1)
    (&#39;b&#39;, 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(&#39;abracadabra&#39;).most_common(3)
    [(&#39;a&#39;, 5), (&#39;b&#39;, 2), (&#39;r&#39;, 2)]
    
    Counter(&#39;abracadabra&#39;).most_common(5)
    [(&#39;a&#39;, 5), (&#39;b&#39;, 2), (&#39;r&#39;, 2), (&#39;c&#39;, 1), (&#39;d&#39;, 1)]
    ログイン後にコピー

    3. elements() および sort() メソッド

    説明: 各要素がカウント値で指定された回数だけ繰り返される反復子を返します。要素は最初に出現した順に返されます。要素の数が 1 未満の場合、elements() はそれを無視します。
    例:

    c = Counter(a=4, b=2, c=0, d=-2)
    list(c.elements())
    [&#39;a&#39;, &#39;a&#39;, &#39;a&#39;, &#39;a&#39;, &#39;b&#39;, &#39;b&#39;]
    
    sorted(c.elements())
    [&#39;a&#39;, &#39;a&#39;, &#39;a&#39;, &#39;a&#39;, &#39;b&#39;, &#39;b&#39;]
    
    c = Counter(a=4, b=2, c=0, d=5)
    list(c.elements())
    [&#39;a&#39;, &#39;a&#39;, &#39;a&#39;, &#39;a&#39;, &#39;b&#39;, &#39;b&#39;, &#39;d&#39;, &#39;d&#39;, &#39;d&#39;, &#39;d&#39;, &#39;d&#39;]
    ログイン後にコピー
    from collections import Counter
     
    c = Counter(&#39;ABCABCCC&#39;)
    print(c.elements()) #<itertools.chain object at 0x0000027D94126860>
     
    #尝试转换为list
    print(list(c.elements())) #[&#39;A&#39;, &#39;A&#39;, &#39;C&#39;, &#39;C&#39;, &#39;C&#39;, &#39;C&#39;, &#39;B&#39;, &#39;B&#39;]
     
    #或者这种方式
    print(sorted(c.elements()))  #[&#39;A&#39;, &#39;A&#39;, &#39;B&#39;, &#39;B&#39;, &#39;C&#39;, &#39;C&#39;, &#39;C&#39;, &#39;C&#39;]
     
    #这里与sorted的作用是: list all unique elements,列出所有唯一元素
    #例如
    print( sorted(c) ) #[&#39;A&#39;, &#39;B&#39;, &#39;C&#39;]
    ログイン後にコピー

    公式ドキュメントの例:

    # Knuth&#39;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({&#39;a&#39;: 3, &#39;b&#39;: 0, &#39;c&#39;: -3, &#39;d&#39;: -6})
    
    #减去一个abcd
    str0 = Counter(&#39;aabbccdde&#39;)
    str0
    Counter({&#39;a&#39;: 2, &#39;b&#39;: 2, &#39;c&#39;: 2, &#39;d&#39;: 2, &#39;e&#39;: 1})
    
    str0.subtract(&#39;abcd&#39;)
    str0
    Counter({&#39;a&#39;: 1, &#39;b&#39;: 1, &#39;c&#39;: 1, &#39;d&#39;: 1, &#39;e&#39;: 1}
    ログイン後にコピー
    subtract_test01 = Counter("AAB")
    subtract_test01.subtract("BCC")
    print(subtract_test01)  #Counter({&#39;A&#39;: 2, &#39;B&#39;: 0, &#39;C&#39;: -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({&#39;a&#39;: 4, &#39;b&#39;: 3})
    c - d                       # subtract (keeping only positive counts)
    Counter({&#39;a&#39;: 2})
    c & d                       # intersection:  min(c[x], d[x]) 
    Counter({&#39;a&#39;: 1, &#39;b&#39;: 1})
    c | d                       # union:  max(c[x], d[x])
    Counter({&#39;a&#39;: 3, &#39;b&#39;: 2})
    ログイン後にコピー
    print(Counter(&#39;AAB&#39;) + Counter(&#39;BCC&#39;))
    #Counter({&#39;B&#39;: 2, &#39;C&#39;: 2, &#39;A&#39;: 2})
    print(Counter("AAB")-Counter("BCC"))
    #Counter({&#39;A&#39;: 2})
    ログイン後にコピー

    And" および "OR" 演算:

    print(Counter(&#39;AAB&#39;) & Counter(&#39;BBCC&#39;))
    #Counter({&#39;B&#39;: 1})
     
    print(Counter(&#39;AAB&#39;) | Counter(&#39;BBCC&#39;))
    #Counter({&#39;A&#39;: 2, &#39;C&#39;: 2, &#39;B&#39;: 2})
    ログイン後にコピー

    一方向加算および減算 (単項演算子) は、空のカウンタに加算または減算することを意味します。これは、カウント値に正の値を乗算することと同等です。または負の値の場合、出力では、結果が 0 または 0 未満であるカウントも無視されます:

    c = Counter(a=2, b=-4)
    +c
    Counter({&#39;a&#39;: 2})
    -c
    Counter({&#39;b&#39;: 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 = &#39;定位手机定位汽车定位GPS定位人定位位置查询&#39;         
    str_1 = &#39;导航定位手机定位汽车定位GPS定位人定位位置查询&#39;         
    
    str_sim(str_0,str_1,5)    
    0.75
    ログイン後にコピー

    7. 合計を計算します。要素の数、Keys() および Values()

    from collections import Counter
     
    c = Counter(&#39;ABCABCCC&#39;)
    print(sum(c.values()))  # 8  total of all counts
     
    print(c.keys())  #dict_keys([&#39;A&#39;, &#39;B&#39;, &#39;C&#39;])
    print(c.values())  #dict_values([2, 2, 4])
    ログイン後にコピー

    8. 単一要素の結果のクエリ

    from collections import Counter
    c = Counter(&#39;ABBCC&#39;)
    #查询具体某个元素的个数
    print(c["A"])  #1
    ログイン後にコピー

    9. Add

    for elem in &#39;ADD&#39;:  # update counts from an iterabl
        c[elem] += 1
    print(c.most_common())  #[(&#39;C&#39;, 2), (&#39;D&#39;, 2), (&#39;A&#39;, 2), (&#39;B&#39;, 2)]
    #可以看出“A”增加了一个,新增了两个“D”
    ログイン後にコピー

    10. 削除 (del)

    del c["D"]
    print(c.most_common())  #[(&#39;C&#39;, 2), (&#39;A&#39;, 2), (&#39;B&#39;, 2)]
    del c["C"]
    print(c.most_common())  #[(&#39;A&#39;, 2), (&#39;B&#39;, 2)]
    ログイン後にコピー

    11. update update()

    d = Counter("CCDD")
    c.update(d)
    print(c.most_common())  #[(&#39;B&#39;, 2), (&#39;A&#39;, 2), (&#39;C&#39;, 2), (&#39;D&#39;, 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(&#39;hello world&#39;)
    Counter({&#39;l&#39;: 3, &#39;o&#39;: 2, &#39;h&#39;: 1, &#39;e&#39;: 1, &#39; &#39;: 1, &#39;w&#39;: 1, &#39;r&#39;: 1, &#39;d&#39;: 1})
    # 统计单词数
    >>> collections.Counter(&#39;hello world hello world hello nihao&#39;.split())
    Counter({&#39;hello&#39;: 3, &#39;world&#39;: 2, &#39;nihao&#39;: 1})
    ログイン後にコピー

    一般的に使用される方法:

    >>> c = collections.Counter(&#39;hello world hello world hello nihao&#39;.split())
    >>> c
    Counter({&#39;hello&#39;: 3, &#39;world&#39;: 2, &#39;nihao&#39;: 1})
    # 获取指定对象的访问次数,也可以使用get()方法
    >>> c[&#39;hello&#39;]
    3
    >>> c = collections.Counter(&#39;hello world hello world hello nihao&#39;.split())
    # 查看元素
    >>> list(c.elements())
    [&#39;hello&#39;, &#39;hello&#39;, &#39;hello&#39;, &#39;world&#39;, &#39;world&#39;, &#39;nihao&#39;]
    # 追加对象,或者使用c.update(d)
    >>> c = collections.Counter(&#39;hello world hello world hello nihao&#39;.split())
    >>> d = collections.Counter(&#39;hello world&#39;.split())
    >>> c
    Counter({&#39;hello&#39;: 3, &#39;world&#39;: 2, &#39;nihao&#39;: 1})
    >>> d
    Counter({&#39;hello&#39;: 1, &#39;world&#39;: 1})
    >>> c + d
    Counter({&#39;hello&#39;: 4, &#39;world&#39;: 3, &#39;nihao&#39;: 1})
    # 减少对象,或者使用c.subtract(d)
    >>> c - d
    Counter({&#39;hello&#39;: 2, &#39;world&#39;: 1, &#39;nihao&#39;: 1})
    # 清除
    >>> c.clear()
    >>> c
    Counter()
    ログイン後にコピー

    以上がPython カウンター: collections.Counter の使用方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

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

    AI Clothes Remover

    AI Clothes Remover

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

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    Video Face Swap

    Video Face Swap

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

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

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

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

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

    PHPおよびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

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

    PHPとPythonの選択:ガイド PHPとPythonの選択:ガイド Apr 18, 2025 am 12:24 AM

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

    PHPとPython:彼らの歴史を深く掘り下げます PHPとPython:彼らの歴史を深く掘り下げます Apr 18, 2025 am 12:25 AM

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

    Python vs. JavaScript:学習曲線と使いやすさ Python vs. JavaScript:学習曲線と使いやすさ Apr 16, 2025 am 12:12 AM

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

    Sublime Code Pythonを実行する方法 Sublime Code Pythonを実行する方法 Apr 16, 2025 am 08:48 AM

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

    vscodeでコードを書く場所 vscodeでコードを書く場所 Apr 15, 2025 pm 09:54 PM

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

    Golang vs. Python:パフォーマンスとスケーラビリティ Golang vs. Python:パフォーマンスとスケーラビリティ Apr 19, 2025 am 12:18 AM

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

    メモ帳でPythonを実行する方法 メモ帳でPythonを実行する方法 Apr 16, 2025 pm 07:33 PM

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

    See all articles