Python-Zähler: Wie verwende ichcollections.Counter?

王林
Freigeben: 2023-05-08 13:34:07
nach vorne
1059 Leute haben es durchsucht

    1. Einführung

    Ein Counter-Tool ermöglicht schnelles und bequemes Zählen. Counter ist eine Unterklasse von dict, die zum Zählen hashbarer Objekte verwendet wird. Es handelt sich um eine Sammlung mit Elementen, die wie Wörterbuchschlüssel gespeichert sind, und deren Anzahl als Werte. Counts können beliebige ganzzahlige Werte sein, einschließlich 0 und negativer Zahlen, und die Counter-Klasse ähnelt in etwa den Bags oder Multisets in anderen Sprachen. Um es einfach auszudrücken: Schauen wir uns zur Verdeutlichung ein paar Beispiele an.
    Beispiel:

    #计算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}
    Nach dem Login kopieren

    Elemente werden aus einer iterierbaren oder initialisierten Zuordnung (oder einem anderen Zähler) gezählt:

    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})
    Nach dem Login kopieren

    2. Zählen Sie die Anzahl der Vorkommen jedes Elements in der „iterierbaren Sequenz“

    1.1 Auswirkung auf Liste/String

    Es gibt zwei Möglichkeiten, es zu verwenden: Eine besteht darin, es direkt zu verwenden, und die andere darin, es nach der Instanziierung zu verwenden. Wenn Sie es häufig aufrufen möchten, ist die letztere natürlich prägnanter Sie können Counter einfach aufrufen. Die verschiedenen Methoden sind für andere iterierbare Sequenzen gleich.

    #首先引入该方法
    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})
    #以上其实是两种使用方法,一种是直接用,一种是实例化以后使用,如果要频繁调用的话,显然后一种更简洁
    Nach dem Login kopieren

    1.2 Ergebnisse ausgeben

    #查看类型
    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)
    """
    Nach dem Login kopieren

    1.3 Verwenden Sie die integrierte Methode items() zur Ausgabe

    Diese Methode ist natürlich bequemer als die Konvertierung in ein Wörterbuch und die anschließende Ausgabe:

    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)
    """
    Nach dem Login kopieren

    2 häufig vorkommendes Element

    verwendet die Methode most_common(), um eine Liste mit den n häufigsten Elementen und deren Häufigkeit zurückzugeben, sortiert nach Häufigkeit von hoch nach niedrig. Wenn n weggelassen wird oder keine, gibt most_common() alle Elemente im Zähler zurück. Elemente mit gleichen Zählwerten werden in der Reihenfolge ihres ersten Auftretens sortiert:

    #求序列中出现次数最多的元素
     
    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)]
    Nach dem Login kopieren
    rrree

    3. ) und sort ()Methode

    Beschreibung: Gibt einen Iterator zurück, in dem jedes Element so oft wiederholt wird, wie durch den Zählwert angegeben. Elemente werden in der Reihenfolge ihres ersten Auftretens zurückgegeben. Wenn die Anzahl eines Elements kleiner als 1 ist, ignoriert elements() es.

    Beispiel:

    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)]
    Nach dem Login kopieren
    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;]
    Nach dem Login kopieren

    Offizielles Dokumentbeispiel:

    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;]
    Nach dem Login kopieren

    4. Die Ausgabe ignoriert nicht die Anzahl, deren Ergebnis Null oder kleiner als Null ist. Subtrahieren Sie Elemente vom iterativen Objekt oder Kartenobjekt, beide Eingaben und Ausgabe Kann 0 oder negativ sein.

    # 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
    Nach dem Login kopieren
    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}
    Nach dem Login kopieren

    Die Anzahl kann hier auf Null reduziert werden und Null und negative Zahlen umfassen:

    subtract_test01 = Counter("AAB")
    subtract_test01.subtract("BCC")
    print(subtract_test01)  #Counter({&#39;A&#39;: 2, &#39;B&#39;: 0, &#39;C&#39;: -2})
    Nach dem Login kopieren

    5. Wörterbuchmethoden

    Normalerweise können Wörterbuchmethoden für Zählerobjekte verwendet werden, außer dass es zwei Methoden gibt, die anders funktionieren als Wörterbücher.

    fromkeys(iterable): Diese Klassenmethode ist in Counter nicht implementiert.

    • update([iterable-or-mapping]): Elemente aus dem iterierbaren Objekt zählen oder aus einem anderen Mapping-Objekt (oder Zähler) hinzufügen, die Anzahl der Elemente wird hinzugefügt. Darüber hinaus sollte das Iterationsobjekt ein Sequenzelement und kein (Schlüssel-Wert-)Paar sein.

    • 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
      Nach dem Login kopieren

      6. Mathematische Operationen

    • Diese Funktion ist sehr leistungsfähig und bietet mehrere mathematische Operationen, die mit Counter-Objekten kombiniert werden können, um Multisets (Elemente größer als 0 im Zähler) zu erzeugen. Addition und Subtraktion kombinieren Zähler, indem sie die entsprechende Anzahl von Elementen addieren oder subtrahieren. Schnittpunkt und Vereinigung geben den minimalen bzw. maximalen Wert der entsprechenden Anzahl zurück. Jede Operation akzeptiert vorzeichenbehaftete Zählungen, aber die Ausgabe ignoriert Zählungen, deren Ergebnis Null oder kleiner als Null ist.
    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
    Nach dem Login kopieren
    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})
    Nach dem Login kopieren

    und „und „oder“-Operationen:

    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})
    Nach dem Login kopieren

    unäre Addition und Subtraktion (unäre Operatoren) bedeutet Addition oder Subtraktion vom leeren Zähler, was einer Multiplikation des Zählwerts mit einem positiven oder negativen Wert entspricht, die gleiche Ausgabe Zählungen ignorieren, deren Ergebnisse Null oder kleiner als Null sind:

    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})
    Nach dem Login kopieren

    Schreiben Sie einen Algorithmus zur Berechnung der Textähnlichkeit und der gewichteten Ähnlichkeit:

    c = Counter(a=2, b=-4)
    +c
    Counter({&#39;a&#39;: 2})
    -c
    Counter({&#39;b&#39;: 4})
    Nach dem Login kopieren

    7. Berechnen Sie die Gesamtzahl der Elemente, Keys() und Values()

    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
    Nach dem Login kopieren

    8 Einzelelementergebnisse

    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])
    Nach dem Login kopieren

    10. Update update()

    from collections import Counter
    c = Counter(&#39;ABBCC&#39;)
    #查询具体某个元素的个数
    print(c["A"])  #1
    Nach dem Login kopieren

    3. Wird hauptsächlich zum Zählen der Häufigkeit von Objekten verwendet, auf die Sie zugreifen.

    elements(): Gibt einen Iterator zurück, die Anzahl der wiederholten Berechnungen für jedes Element sei Ignorieren.

    most_common([n]): Gibt eine Liste mit den n am häufigsten aufgerufenen Elementen und der Anzahl zurück.

    subtract([iterable-or-mapping]): Subtrahiert Elemente vom iterierbaren Objekt, der Eingabe und die Ausgabe kann 0 oder negativ sein, was sich von der Rolle des Minuszeichens unterscheidet –

      update([iterable-or-mapping]): Elemente aus einem iterierbaren Objekt zählen oder aus einem anderen Mapping-Objekt (oder Zähler) hinzufügen
    • .
    • Beispiel:
    • 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”
      Nach dem Login kopieren

      Häufig verwendete Methode:

      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)]
      Nach dem Login kopieren

      Das obige ist der detaillierte Inhalt vonPython-Zähler: Wie verwende ichcollections.Counter?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Verwandte Etiketten:
    Quelle:yisu.com
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!