Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Kaunter Python: Bagaimana untuk menggunakan collections.Counter?

Kaunter Python: Bagaimana untuk menggunakan collections.Counter?

王林
王林ke hadapan
2023-05-08 13:34:071066semak imbas

    1. Pengenalan

    Alat pembilang menyediakan pengiraan pantas dan mudah ialah subkelas dict, digunakan untuk mengira objek boleh cincang. Ia ialah koleksi dengan elemen yang disimpan seperti kunci kamus dan dikira sebagai nilai. Kiraan boleh berupa sebarang nilai integer, termasuk 0 dan nombor negatif, dan kelas Counter adalah sedikit seperti beg atau multiset dalam bahasa lain. Ringkasnya, ia boleh dikira secara statistik Mari kita lihat beberapa contoh untuk menjelaskannya.
    Contoh:

    #计算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}

    Elemen dikira daripada boleh diulang atau dimulakan daripada pemetaan lain (atau pembilang):

    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 Operasi asas

    1 bilangan kejadian bagi setiap elemen dalam "Jujukan Boleh Diulang"

    1.1 Kesan pada senarai/rentetan

    Berikut ialah dua cara untuk menggunakannya, satu adalah menggunakannya secara langsung dan satu lagi adalah untuk instantiate it Jika anda ingin memanggilnya dengan kerap, jelas yang terakhir adalah lebih ringkas, kerana anda boleh dengan mudah memanggil pelbagai kaedah dalam Counter, dan rutin yang sama digunakan untuk urutan lelaran lain.

    #首先引入该方法
    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 Hasil keluaran

    #查看类型
    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 Gunakan kaedah item() terbina dalam untuk mengeluarkan

    Jelas sekali kaedah ini lebih mudah daripada menukar kepada kamus dan kemudian mengeluarkannya :

    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() mengira elemen dengan kejadian terbanyak

    Gunakan kaedah most_common() untuk mengembalikan senarai yang mengandungi n elemen paling biasa dan masa kejadiannya, dalam tertib menaik kesamaan Susun kepada rendah. Jika n diabaikan atau Tiada, most_common() akan mengembalikan semua elemen dalam pembilang Elemen dengan nilai kiraan yang sama diisih mengikut susunan penampilan pertama 3. kaedah elemen () dan sort()

    Penerangan: Mengembalikan iterator di mana setiap elemen akan diulang bilangan kali yang ditentukan oleh nilai kiraan. Elemen dikembalikan mengikut urutan kejadian pertama. Jika kiraan elemen kurang daripada 1, elemen() akan mengabaikannya.

    Contoh:

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

    Contoh dokumen rasmi:

    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;]

    4 operasi tolak tolak(): output tidak akan mengabaikan kiraan yang hasilnya sifar atau kurang daripada sifar

    Tolak elemen daripada iterator atau objek peta Kedua-dua input dan output boleh menjadi 0 atau negatif.

    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

    Bilangan di sini boleh dikurangkan kepada sifar dan boleh termasuk sifar dan nombor negatif:

    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}

    5 kaedah kamus

    Biasanya kaedah kamus boleh digunakan pada objek Counter, kecuali Terdapat dua kaedah yang berfungsi secara berbeza daripada kamus.

    fromkeys(iterable): Kaedah kelas ini tidak dilaksanakan dalam Kaunter.
    • kemas kini([iterable-or-mapping]): Kira elemen daripada objek lelaran atau tambah daripada objek pemetaan lain (atau pembilang), bilangan elemen ditambah. Di samping itu, objek lelaran hendaklah elemen jujukan, bukan pasangan (kunci, nilai).
    • subtract_test01 = Counter("AAB")
      subtract_test01.subtract("BCC")
      print(subtract_test01)  #Counter({&#39;A&#39;: 2, &#39;B&#39;: 0, &#39;C&#39;: -2})

      6 Operasi matematik
    Fungsi ini sangat berkuasa dan menyediakan beberapa operasi matematik yang boleh digabungkan dengan objek Counter untuk menghasilkan multiset (elemen yang lebih besar daripada 0 dalam kaunter). Penambahan dan penolakan menggabungkan pembilang dengan menambah atau menolak kiraan unsur yang sepadan. Persilangan dan kesatuan mengembalikan nilai minimum atau maksimum bagi kiraan yang sepadan. Setiap operasi menerima kiraan yang ditandatangani, tetapi output mengabaikan kiraan yang hasilnya adalah sifar atau kurang daripada sifar. Operasi

    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
    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

    DAN" dan "ATAU":

    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})

    Penambahan dan penolakan unari (operator unari) bermaksud menambah atau menolak daripada pembilang kosong, yang bersamaan dengan mendarab nilai kiraan dengan nilai positif atau nilai negatif, output yang sama akan mengabaikan kiraan yang hasilnya sifar atau kurang daripada sifar:

    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})

    Tulis algoritma untuk mengira persamaan teks, persamaan wajaran:

    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})

    7 bilangan elemen, Kekunci() dan Nilai()

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

    8 Pertanyaan hasil elemen tunggal

    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

    9.Tambah

    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])

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

    11. Kemas kini kemas kini()

    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”

    12 Clear clear()

    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)]

    3 Ringkasan

    Counter ialah subkelas dict, terutamanya digunakan untuk mengakses anda. Kira kekerapan objek:

    elemen(): Mengembalikan lelaran, bilangan pengiraan berulang untuk setiap elemen, jika kiraan elemen itu kurang daripada 1 akan diabaikan ([iterable-or-mapping]): Tolak elemen daripada objek boleh lelar Input dan output boleh menjadi 0 atau nombor negatif, yang berbeza daripada peranan tanda tolak -

      kemas kini ([iterable-or-mapping]): Kira elemen daripada objek lelaran atau tambah daripada objek pemetaan lain (atau pembilang)
    • Contoh:
    • 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)]

      Biasanya digunakan

    Atas ialah kandungan terperinci Kaunter Python: Bagaimana untuk menggunakan collections.Counter?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam