අක්ෂරයක අක්ෂර ගණන ගණනය කරන්න


966

නූලක ඇති අක්‍ෂර ගණන ගණනය කිරීමට ඇති සරලම ක්‍රමය කුමක්ද?

උදා: තුළ 'a'දිස්වන වාර ගණන ගණන් කරන්න'Mary had a little lamb'

Answers:


1353

str.count (උප [, ආරම්භය [, අවසානය]])

subපරාසය තුළ උපස්ථරයේ අතිච්ඡාදනය නොවන සිදුවීම් ගණන ආපසු එවන්න [start, end]. විකල්ප තර්ක startසහ endපෙති අංකනයෙහි මෙන් අර්ථ නිරූපණය කෙරේ.

>>> sentence = 'Mary had a little lamb'
>>> sentence.count('a')
4


116

වෙනත් පිළිතුරු පැවසූ පරිදි, නූල් ක්‍රම ගණනය () භාවිතා කිරීම බොහෝ විට සරලම ය, නමුත් ඔබ මෙය නිතර කරන්නේ නම්, එකතු කිරීම් බලන්න. ගණන් කරන්න :

from collections import Counter
my_str = "Mary had a little lamb"
counter = Counter(my_str)
print counter['a']

16
නිතර භාවිතා කරන විට මෙය වඩා හොඳ වන්නේ ඇයි? වාසිය කුමක්ද?
meshy

21
දී ඇති නූලක ඇති අක්ෂර විශාල ප්‍රමාණයක් සඳහා ඔබට ගණන් කිරීමට අවශ්‍ය නම්, කවුන්ටරය ඒවා සියල්ලම වඩාත් සංක්ෂිප්ත ස්වරූපයෙන් සපයයි. විවිධ නූල් ගණනාවකින් එක් අකුරක් සඳහා ගණන් කිරීම ඔබට අවශ්‍ය නම්, කවුන්ටරය කිසිදු ප්‍රතිලාභයක් ලබා නොදේ.
බ්‍රෙන්ඩන් බ්‍රවුන්

2
මෙම සුවිශේෂී අවස්ථාව සඳහා, අක්ෂර ගණන් කිරීමේදී, මම වඩාත් කැමති collection.counter ය. විශේෂිත උපස්ථරයක අවස්ථා සොයා ගැනීම සඳහා, මම සාමාන්‍ය ප්‍රකාශනයක් හෝ str.count () ක්‍රමයක් භාවිතා කරමි. මම පරීක්‍ෂා කර නැත, නමුත් එක් උපස්ථරයක සිදුවීම් ගණනය කරනවාට වඩා සියලු අක්ෂර ගණනය කිරීමේදී සහ ශබ්ද කෝෂයකට එකතු කිරීමේදී සුළු කාර්ය සාධනයක් නිසා කාර්ය සාධන වෙනසක් තිබිය හැකිය. සෙවීම සඳහා ඉතා දිගු ගොනුවක් ජනනය කිරීම සඳහා ස්ක්‍රිප්ට් එකක් ලිවීමට මම යෝජනා කරමි.
ඩැනියෙල් බී

5
නිතර භාවිතා කරන විට ඇති වාසිය නම් කවුන්ටරය සියළුම ගණනය කිරීම් එක් වරක් ගණනය කිරීමයි, එය එක් වරක් mystring.count ('a') කිරීම තරම් වේගවත් වේ. මේ අනුව, ඔබ මෙය 20 වතාවක් කළහොත්, ඔබ ගණනය කිරීමේ කාලය මෙන් 10 ගුණයක් ඉතිරි කරයි. අයිතමයක් නූල් වල තිබේදැයි කවුන්ටරයටද ඔබට පැවසිය හැකිය: නිදසුනක් ලෙස, 'a' කවුන්ටරයේ නම්:
BAMF4bacon

53

නිත්‍ය ප්‍රකාශන සමහර විට?

import re
my_string = "Mary had a little lamb"
len(re.findall("a", my_string))

30
හොඳ අදහසක්, නමුත් මේ අවස්ථාවේ දී අධික ලෙස මරන්න. 'ගණන් කිරීම' යන නූල් ක්‍රමය එකම දේ කරන්නේ එය කරන්නේ කුමක්ද යන්න පිළිබඳව වහාම පැහැදිලි වීමේ අමතර ප්‍රසාද දීමනාවෙනි.
නිලමෝ

19
negative ණ අනුපාතය ඇයි, සමහර විට යමෙකුට මේ හා සමාන කේතයක් අවශ්‍ය වේ. මගේ ඡන්දය
කිල්ටෙක්

12
මෙය පහත් කොට දැක්විය යුත්තේ එය නූලක අක්ෂර ගණන් කිරීමට හැකි අවම කාර්යක්ෂම ක්‍රමය වන බැවිනි. ප්‍රශ්නය හුදෙක් අක්ෂර ගණනය කිරීම නම්, ප්‍රශ්නය පෙන්නුම් කරන පරිදි, කාර්යය කිරීමට වඩා නරක ක්‍රමයක් සොයා ගැනීම දුෂ්කර වනු ඇත. මතකය සහ ප්‍රොසෙසරය ඉහළින් ගත් විට, මෙම විසඳුම අනිවාර්යයෙන්ම වළක්වා ගත යුතුය. නූලක අක්ෂර ගණන සොයා ගැනීමට මෙම ක්‍රමය භාවිතා කිරීමට කිසිවෙකුට "අවශ්‍ය" නොවේ.
ක්‍රිස්ටෝපර්

1
ilkiltek ඇත්ත වශයෙන්ම, මෙම කුඩා ස්නිපටය නිතිපතා ප්‍රකාශනයකින් මට වඩා ටිකක් ප්‍රයෝජනවත් වී ඇත
Speccy

නූල් ක්‍රම නොමැති විට හොඳ විසඳුමක්:len(re.findall('1',bin(10)))
කොනර්


16

පයිතන් -3.x:

"aabc".count("a")

str.count (උප [, ආරම්භය [, අවසානය]])

පරාසය තුළ උපස්ථරයේ උප අතිච්ඡාදනය නොවන සිදුවීම් ගණන නැවත ලබා දෙන්න [ආරම්භය, අවසානය]. පෙති අංකනයෙහි මෙන් විකල්ප තර්ක ආරම්භය සහ අවසානය අර්ථ නිරූපණය කෙරේ.


13

str.count(a)නූලක තනි අක්‍ෂරයක් ගණනය කිරීමට හොඳම විසඳුම වේ. නමුත් ඔබට තවත් අක්ෂර ගණන් කිරීමට අවශ්‍ය නම්, ඔබට ගණන් කිරීමට අවශ්‍ය අක්‍ෂර මෙන් මුළු නූලම කියවිය යුතුය.

මෙම කාර්යය සඳහා වඩා හොඳ ප්‍රවේශයක් වනුයේ:

from collections import defaultdict

text = 'Mary had a little lamb'
chars = defaultdict(int)

for char in text:
    chars[char] += 1

එබැවින් ඔබට සෑම අකුරකම සිදුවීම් ගණන නැවත ලබා දෙන නියෝගයක් 0ඇත.

>>>chars['a']
4
>>>chars['x']
0

අන්තරාදායක කවුන්ටරයක් ​​සඳහා ඔබට උප defaultdictපංතියෙන් විකෘති සහ ප්‍රවේශ ක්‍රම ඉක්මවා යා හැකිය (මූලික පන්තියේ ඒවා කියවීමට පමණි):

class CICounter(defaultdict):
    def __getitem__(self, k):
        return super().__getitem__(k.lower())

    def __setitem__(self, k, v):
        super().__setitem__(k.lower(), v)


chars = CICounter(int)

for char in text:
    chars[char] += 1

>>>chars['a']
4
>>>chars['M']
2
>>>chars['x']
0

ඔබ මූලික වශයෙන් ප්‍රතිනිර්මාණය Counterකරමින් සිටින අතර එය දැනටමත් පන්තියකි collections.
merv

@merv ඇත්තටම නැහැ. Counterවඩාත් වඩා පුම්බා පිරිසිදු Python පන්තියේ හා defaultdictගේ __missing__වේ සී ලියා . මේ වගේ සරල කාර්යයක් සඳහා ( intසී හි ද ක්‍රියාත්මක වේ) මෙම ප්‍රවේශය ඉතා වේගවත් ය.
නූනෝ ඇන්ඩ්‍රේ

11

මෙම පහසු සහ forward ජු ඉදිරි කාර්යය උපකාරී වනු ඇත:

def check_freq(x):
    freq = {}
    for c in x:
       freq[c] = str.count(c)
    return freq

check_freq("abbabcbdbabdbdbabababcbcbab")
{'a': 7, 'b': 14, 'c': 3, 'd': 3}

3
ඔබ සෙවනැල්ලයි str. ඔබ එහි නම විචල්‍යයට ලබා දෙන්නේ නම්, strඑය තවදුරටත් ගොඩනංවන ලද වර්ගයක් නොවේ. එසේම ඔබ b හි දහහතර වතාවක් ගණන් කරයි. ඔබ හුදෙක් වෙනස් කිරීම මගින් ගත කරේ for c in textසමග for c in set(text).
නූනෝ ඇන්ඩ්‍රේ

10

ඔබට සිද්ධි-සංවේදීතාව අවශ්‍ය නම් නිත්‍ය ප්‍රකාශන ඉතා ප්‍රයෝජනවත් වේ (ඇත්ත වශයෙන්ම රීජෙක්ස්හි සියලු බලය).

my_string = "Mary had a little lamb"
# simplest solution, using count, is case-sensitive
my_string.count("m")   # yields 1
import re
# case-sensitive with regex
len(re.findall("m", my_string))
# three ways to get case insensitivity - all yield 2
len(re.findall("(?i)m", my_string))
len(re.findall("m|M", my_string))
len(re.findall(re.compile("m",re.IGNORECASE), my_string))

රීජෙක්ස් අනුවාදය ක්‍රියාත්මක වීමට දස ගුණයක අනුපිළිවෙලක් ගන්නා බව මතක තබා ගන්න, එය ගැටළුවක් වනු ඇත්තේ my_string විශාල ලෙස දිගු වුවහොත් හෝ කේතය ගැඹුරු පුඩුවක් තුළ තිබේ නම් පමණි.


1
ඔබ සිද්ධි සංවේදීතාව නිවැරදි කිරීමට උත්සාහ කරන්නේ නම් රීජෙක්ස් අධික ලෙස මරණයට පත්වේ. my_sting.lower (). ගණන් කිරීම ('m') වඩා ක්‍රියාකාරී, වඩා පැහැදිලි සහ වඩා සංක්ෂිප්ත ය.
ඔග්‍රේ කේත

5
a = 'have a nice day'
symbol = 'abcdefghijklmnopqrstuvwxyz'
for key in symbol:
    print key, a.count(key)

2
str = "count a character occurance"

List = list(str)
print (List)
Uniq = set(List)
print (Uniq)

for key in Uniq:
    print (key, str.count(key))

2

භාවිතයෙන් තොරව සියළුම අක්ෂර ගණනය කිරීම් ලබා ගැනීමට විකල්ප ක්‍රමයක් Counter()වන countඅතර රීජෙක්ස්

counts_dict = {}
for c in list(sentence):
  if c not in counts_dict:
    counts_dict[c] = 0
  counts_dict[c] += 1

for key, value in counts_dict.items():
    print(key, value)

1

countනූලක චරිතයක් සිදුවීම ගණනය කිරීමේ නියත වශයෙන්ම වඩාත්ම සංක්ෂිප්ත හා කාර්යක්ෂම ක්‍රමය වන නමුත් මම lambdaමෙවැනි දෙයක් භාවිතා කරමින් විසඳුමක් ඉදිරිපත් කිරීමට උත්සාහ කළෙමි :

sentence = 'Mary had a little lamb'
sum(map(lambda x : 1 if 'a' in x else 0, sentence))

මෙහි ප්‍රති result ලය වනු ඇත්තේ:

4

එසේම, මෙහි තවත් එක් වාසියක් වන්නේ වාක්‍යය ඉහත අකුරු අඩංගු උප-නූල් ලැයිස්තුවක් නම්, එසේම මෙය භාවිතා කිරීම නිසා නිවැරදි ප්‍රති result ලය ලබා දෙයි in. බලන්න :

sentence = ['M', 'ar', 'y', 'had', 'a', 'little', 'l', 'am', 'b']
sum(map(lambda x : 1 if 'a' in x else 0, sentence))

මෙහි ප්‍රති results ලය ද වේ:

4

නමුත් ඇත්ත වශයෙන්ම මෙය ක්‍රියාත්මක වන්නේ 'a'මෙම විශේෂිත අවස්ථාව වැනි තනි අක්ෂර ඇතිවීම පරීක්ෂා කිරීමේදී පමණි .


0

"ඔබට අක්ෂර වින්‍යාසය අවශ්‍ය බව සොයා ගැනීමට ගණන් භාවිතා නොකර" ක්‍රමය.

import re

def count(s, ch):

   pass

def main():

   s = raw_input ("Enter strings what you like, for example, 'welcome': ")  

   ch = raw_input ("Enter you want count characters, but best result to find one character: " )

   print ( len (re.findall ( ch, s ) ) )

main()

7
හිස් ගණන් කිරීමේ ක්‍රියාකාරිත්වය ඇයි? ප්‍රධාන () ක්‍රියාකාරිත්වය ඇයි? සෑම තැනකම කැත අවකාශ ඇයි? මෙය හොඳ පිළිතුරක් නොවේ.
bugmenot123

0

මම පැන්ඩා පුස්තකාලයේ රසිකයෙක්, විශේෂයෙන් value_counts()ක්‍රමවේදය. ඔබේ නූලෙහි එක් එක් අක්ෂර සිදුවීම ගණනය කිරීමට ඔබට එය භාවිතා කළ හැකිය:

>>> import pandas as pd
>>> phrase = "I love the pandas library and its `value_counts()` method"
>>> pd.Series(list(phrase)).value_counts()
     8
a    5
e    4
t    4
o    3
n    3
s    3
d    3
l    3
u    2
i    2
r    2
v    2
`    2
h    2
p    1
b    1
I    1
m    1
(    1
y    1
_    1
)    1
c    1
dtype: int64

-1
spam = 'have a nice day'
var = 'd'


def count(spam, var):
    found = 0
    for key in spam:
        if key == var:
            found += 1
    return found
count(spam, var)
print 'count %s is: %s ' %(var, count(spam, var))

-1

පයිතන් 3

මෙය සාක්ෂාත් කර ගැනීමට ක්‍රම දෙකක් වේ:

1) සාදන ලද ශ්‍රිත ගණන සමඟ ()

sentence = 'Mary had a little lamb'
print(sentence.count('a'))`

2) ශ්‍රිතයක් භාවිතා නොකර

sentence = 'Mary had a little lamb'    
count = 0

for i in sentence:
    if i == "a":
        count = count + 1

print(count)

-2

මෙම IMHO ට වඩා වැඩි නොවේ - ඔබට ඉහළ හෝ පහළ ක්‍රම එකතු කළ හැකිය

def count_letter_in_str(string,letter):
    return string.count(letter)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.