Katika Python, idadi ya vitu vyote kwenye orodha au tuple inaweza kupatikana kwa kutumia kazi iliyojengwa ndani len(), na idadi ya kila kipengele (idadi ya matukio ya kila kipengele) inaweza kupatikana kwa kutumia count() njia. .
Kwa kuongezea, darasa la Counter la makusanyo ya maktaba ya kiwango cha Python inaweza kutumika kupata vitu kwa mpangilio wa idadi ya matukio.
Katika sehemu hii, tutajadili yafuatayo
- Hesabu jumla ya idadi ya vipengele:
len()
- Hesabu idadi ya kila kipengele (idadi ya matukio ya kila kipengele):
count()
- Matumizi.
collections.Counter
- Vipengele vinarejeshwa kulingana na marudio ya tukio:
most_common()
- Hesabu nambari (aina) ya vitu visivyoingiliana (vipengele vya kipekee).
- Hesabu idadi ya vipengele vinavyokidhi hali hiyo.
Kwa kuongezea, kama mfano halisi, ifuatayo inaelezewa na nambari ya sampuli.
- Huhesabu idadi ya matukio ya neno katika mfuatano.
- Hesabu idadi ya matukio ya mhusika katika mfuatano.
Sampuli ni orodha, lakini usindikaji sawa unaweza kufanywa na tuples.
- Hesabu jumla ya idadi ya vipengele: len()
- Kuhesabu idadi ya kila kipengele (idadi ya matukio ya kila kipengele): hesabu () mbinu
- Jinsi ya kutumia collections.Counter
- Kupata vipengele kwa mpangilio wa marudio ya kuonekana: most_common() mbinu
- Hesabu nambari (aina) ya vitu visivyoingiliana (vipengele vya kipekee).
- Hesabu idadi ya vipengele vinavyokidhi hali hiyo.
- Huhesabu idadi ya matukio ya neno katika mfuatano.
- Hesabu idadi ya matukio ya mhusika katika mfuatano.
Hesabu jumla ya idadi ya vipengele: len()
Ili kuhesabu jumla ya idadi ya vipengele katika orodha au tuple, tumia chaguo la kukokotoa lililojengewa ndani len().
l = ['a', 'a', 'a', 'a', 'b', 'c', 'c']
print(len(l))
# 7
Kuhesabu idadi ya kila kipengele (idadi ya matukio ya kila kipengele): hesabu () mbinu
Ili kuhesabu idadi ya kila kipengele (idadi ya matukio ya kila kipengele), tumia njia ya kuhesabu () kwa orodha, nakala, nk.
Ikiwa thamani ambayo haipo kama kipengele itapitishwa kama hoja, 0 inarudishwa.
l = ['a', 'a', 'a', 'a', 'b', 'c', 'c']
print(l.count('a'))
# 4
print(l.count('b'))
# 1
print(l.count('c'))
# 2
print(l.count('d'))
# 0
Ikiwa unataka kupata idadi ya matukio ya kila kipengele mara moja, mkusanyiko ufuatao.Counter ni muhimu.
Jinsi ya kutumia collections.Counter
Mkusanyiko wa maktaba ya kiwango cha Python ina darasa la Counter.
Counter() ni aina ndogo ya dict ya aina ya kamusi, ambayo ina data katika mfumo wa vipengele kama funguo na matukio kama maadili.
import collections
l = ['a', 'a', 'a', 'a', 'b', 'c', 'c']
c = collections.Counter(l)
print(c)
# Counter({'a': 4, 'c': 2, 'b': 1})
print(type(c))
# <class 'collections.Counter'>
print(issubclass(type(c), dict))
# True
Ikiwa kipengele kimetajwa kama ufunguo, idadi ya vipengele inaweza kupatikana. Ikiwa thamani ambayo haipo kama kipengele imebainishwa, 0 itarejeshwa.
print(c['a'])
# 4
print(c['b'])
# 1
print(c['c'])
# 2
print(c['d'])
# 0
Unaweza pia kutumia mbinu za aina ya kamusi kama vile vitufe(), values(), items(), n.k.
print(c.keys())
# dict_keys(['a', 'b', 'c'])
print(c.values())
# dict_values([4, 1, 2])
print(c.items())
# dict_items([('a', 4), ('b', 1), ('c', 2)])
Njia hizi hurejesha vipengee vya aina ya dict_keys, n.k. Zinaweza kutumika kama ukitaka kutekeleza taarifa. Ikiwa unataka kuibadilisha kuwa orodha, tumia list().
Kupata vipengele kwa mpangilio wa marudio ya kuonekana: most_common() mbinu
Counter ina most_common() mbinu, ambayo hurejesha orodha ya nakala za fomu (kipengele, idadi ya matukio) iliyopangwa kwa idadi ya matukio.
print(c.most_common())
# [('a', 4), ('c', 2), ('b', 1)]
Kipengele kilicho na idadi kubwa zaidi ya matukio kinaweza kupatikana kwa kubainisha faharasa, kama vile [0] kwa idadi kubwa zaidi ya matukio na [-1] kwa idadi ya chini zaidi ya matukio. Ikiwa unataka kupata vipengele tu au idadi tu ya matukio, unaweza kutaja index zaidi.
print(c.most_common()[0])
# ('a', 4)
print(c.most_common()[-1])
# ('b', 1)
print(c.most_common()[0][0])
# a
print(c.most_common()[0][1])
# 4
Ikiwa unataka kuzipanga kwa mpangilio wa kupunguza idadi ya matukio, tumia kipande kilicho na nyongeza iliyowekwa hadi -1.
print(c.most_common()[::-1])
# [('b', 1), ('c', 2), ('a', 4)]
Ikiwa hoja n imebainishwa kwa most_common() mbinu, ni vipengele vya n pekee vilivyo na idadi kubwa zaidi ya matukio vinarudishwa. Ikiwa imeachwa, vipengele vyote.
print(c.most_common(2))
# [('a', 4), ('c', 2)]
Ikiwa unataka orodha tofauti ya vipengee/matukio yaliyopangwa na idadi ya matukio, badala ya nakala ya (kipengele, hesabu ya matukio), unaweza kuitenganisha kama ifuatavyo.
values, counts = zip(*c.most_common())
print(values)
# ('a', 'c', 'b')
print(counts)
# (4, 2, 1)
Kazi iliyojengewa ndani zip() inatumika kupitisha orodha ya pande mbili (katika kesi hii, orodha ya nakala), na kisha kuifungua na kuitoa.
Hesabu nambari (aina) ya vitu visivyoingiliana (vipengele vya kipekee).
Ili kuhesabu ni vipengee vingapi visivyopishana (vipengee vya kipekee) vilivyo kwenye orodha au tuple (kuna aina ngapi), tumia Counter au set() kama ilivyoelezwa hapo juu.
Idadi ya vipengele katika kitu cha Counter ni sawa na idadi ya vipengele visivyoingiliana katika orodha ya asili, ambayo inaweza kupatikana kwa len ().
l = ['a', 'a', 'a', 'a', 'b', 'c', 'c']
c = collections.Counter(l)
print(len(c))
# 3
Unaweza pia kutumia set(), mjenzi wa seti ya seti, ambayo ni rahisi ikiwa hauitaji kitu cha Counter.
Aina ya seti ni aina ya data ambayo haina vipengele vinavyorudiwa. Kupitisha orodha kwa set() hupuuza thamani zilizorudiwa na hurejesha kitu cha aina kilicho na thamani za kipekee kama vipengele. Idadi ya vipengele vya aina hii hupatikana kwa len ().
print(set(l))
# {'a', 'c', 'b'}
print(len(set(l)))
# 3
Hesabu idadi ya vipengele vinavyokidhi hali hiyo.
Ili kuhesabu idadi ya vipengele katika orodha au nakala zinazokidhi hali fulani, tumia nukuu ya ufahamu wa orodha au vielezi vya jenereta.
Kama mfano, hesabu idadi ya vipengee vilivyo na maadili hasi kwa orodha ifuatayo ya nambari
l = list(range(-5, 6))
print(l)
# [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]
Utumiaji wa usemi wa masharti kwa kila kipengele katika nukuu ya ufahamu wa orodha hutoa orodha ambayo vipengele vyake ni vipengee vya Boolean (kweli, si kweli). Boolean aina ya bool ni aina ndogo ya int ya aina kamili, ambapo true inachukuliwa kuwa 1 na uongo kama 0. Kwa hivyo, idadi ya thamani za kweli (idadi ya vipengele vinavyokidhi hali) inaweza kuhesabiwa kwa kukokotoa jumla kwa kutumia jumla. ().
print([i < 0 for i in l])
# [True, True, True, True, True, False, False, False, False, False, False]
print(sum([i < 0 for i in l]))
# 5
Ikiwa tutabadilisha [] katika nukuu ya ufahamu wa orodha na (), tunapata usemi wa jenereta. Nukuu ya ufahamu wa orodha hutoa orodha ya vipengele vyote vilivyochakatwa, huku usemi wa jenereta huchakata vipengele kwa mfuatano na kwa hivyo ni kumbukumbu bora zaidi.
Wakati usemi wa jenereta ndio hoja pekee, () inaweza kuachwa, kwa hivyo inaweza kuandikwa kama katika kesi ya mwisho.
print(sum((i < 0 for i in l)))
# 5
print(sum(i < 0 for i in l))
# 5
Ikiwa unataka kuhesabu idadi ya maadili ya uongo (idadi ya vipengele ambavyo haikidhi hali), usitumie. Kumbuka kwamba > ina utangulizi wa juu kuliko sivyo (hukokotwa kwanza), kwa hivyo mabano () katika (i < 0) katika mfano ufuatao si lazima.
print([not (i < 0) for i in l])
# [False, False, False, False, False, True, True, True, True, True, True]
print(sum(not (i < 0) for i in l))
# 6
Bila shaka, hali zenyewe zinaweza kubadilishwa.
print(sum(i >= 0 for i in l))
# 6
Mifano mingine imeonyeshwa hapa chini.
Mfano wa kupata idadi ya vitu visivyo vya kawaida kwa orodha ya nambari.
print([i % 2 == 1 for i in l])
# [True, False, True, False, True, False, True, False, True, False, True]
print(sum(i % 2 == 1 for i in l))
# 6
Mfano wa sharti la orodha ya mifuatano.
l = ['apple', 'orange', 'banana']
print([s.endswith('e') for s in l])
# [True, True, False]
print(sum(s.endswith('e') for s in l))
# 2
Counter hutumiwa kuhesabu kulingana na idadi ya matukio. items() hupata nakala ya (kipengele, idadi ya matukio), na idadi ya matukio hubainisha hali hiyo.
Ufuatao ni mfano wa kutoa vipengele vilivyo na matukio mawili au zaidi na kuhesabu jumla ya idadi ya matukio. Katika mfano huu, kuna nne a na mbili c, kwa jumla ya sita.
l = ['a', 'a', 'a', 'a', 'b', 'c', 'c']
c = collections.Counter(l)
print(c.items())
# dict_items([('a', 4), ('b', 1), ('c', 2)])
print([i for i in l if c[i] >= 2])
# ['a', 'a', 'a', 'a', 'c', 'c']
print([i[1] for i in c.items() if i[1] >= 2])
# [4, 2]
print(sum(i[1] for i in c.items() if i[1] >= 2))
# 6
Ufuatao ni mfano wa kutoa aina za vipengele vilivyo na matukio mawili au zaidi na kuhesabu idadi ya matukio. Katika mfano huu, kuna aina mbili, a na c.
print([i[0] for i in c.items() if i[1] >= 2])
# ['a', 'c']
print([i[1] >= 2 for i in c.items()])
# [True, False, True]
print(sum(i[1] >= 2 for i in c.items()))
# 2
Huhesabu idadi ya matukio ya neno katika mfuatano.
Kama mfano halisi, hebu tuhesabu idadi ya matukio ya neno katika kamba.
Kwanza, badilisha koma na vipindi visivyo vya lazima kwa kamba tupu kwa kutumia njia ya replace(), kisha uifute. Kisha, tumia njia ya split() kuunda orodha iliyotengwa na nafasi.
s = 'government of the people, by the people, for the people.'
s_remove = s.replace(',', '').replace('.', '')
print(s_remove)
# government of the people by the people for the people
word_list = s_remove.split()
print(word_list)
# ['government', 'of', 'the', 'people', 'by', 'the', 'people', 'for', 'the', 'people']
Ukiweza kutengeneza orodha, unaweza kupata idadi ya mara ambazo kila neno linatokea, aina za maneno yanayoonekana, na zaidi_kawaida() zaidi ya mikusanyo. Kaunta ili kupata neno linaloonekana mara nyingi zaidi.
print(word_list.count('people'))
# 3
print(len(set(word_list)))
# 6
c = collections.Counter(word_list)
print(c)
# Counter({'the': 3, 'people': 3, 'government': 1, 'of': 1, 'by': 1, 'for': 1})
print(c.most_common()[0][0])
# the
Ulio hapa juu ni mchakato rahisi sana, kwa hivyo ni bora kutumia maktaba kama vile NLTK kwa usindikaji changamano zaidi wa lugha asilia.
Pia, kwa upande wa maandishi ya Kijapani, split() haiwezi kutumika kugawanya maandishi kwa sababu hakuna utengano wazi wa maneno. Kwa mfano, unaweza kutumia maktaba ya Janome kufanikisha hili.
Hesabu idadi ya matukio ya mhusika katika mfuatano.
Kwa kuwa mifuatano pia ni aina ya mfuatano, inaweza kutumika pamoja na njia ya count() au kupitishwa kama hoja kwa mjenzi wa collections.Counter().
s = 'supercalifragilisticexpialidocious'
print(s.count('p'))
# 2
c = collections.Counter(s)
print(c)
# Counter({'i': 7, 's': 3, 'c': 3, 'a': 3, 'l': 3, 'u': 2, 'p': 2, 'e': 2, 'r': 2, 'o': 2, 'f': 1, 'g': 1, 't': 1, 'x': 1, 'd': 1})
Mfano wa kurejesha herufi 5 bora zinazotokea mara nyingi.
print(c.most_common(5))
# [('i', 7), ('s', 3), ('c', 3), ('a', 3), ('l', 3)]
values, counts = zip(*c.most_common(5))
print(values)
# ('i', 's', 'c', 'a', 'l')