计算string中字符的出现次数

计算string中字符出现次数的最简单方法是什么?

例如,计算'Mary had a little lamb'出现'a'的次数

str.count(sub [,start [,end]])

[start, end]范围内返回子串sub的非重叠次数。 可选参数startend被解释为切片符号。

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

你可以使用count() :

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

正如其他答案所说,使用string方法count()可能是最简单的,但如果你经常这样做,检查集合.Counter :

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

正则expression式可能?

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

更多信息在这里

 "aabc".count("a") 

正则expression式是非常有用的,如果你想不区分大小写(当然,所有的正则expression式的力量)。

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

请注意,正则expression式版本的运行时间长达十倍,只有当my_string非常长时,或者代码在深循环内,这可能会成为问题。

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

“不用数字找string”方法。

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

str.count(a)是计算string中单个字符的最佳解决scheme。 但是如果你需要计算多于一个的字符,那么你需要多次读取string。

这个工作的更好的方法是:

 from collections import defaultdict string = 'Mary had a little lamb' chars = defaultdict(int) for char in string: chars[char] += 1 

所以你将得到一个字典,返回string中每个字母的出现次数,如果不存在,则返回0

 >>>chars['a'] 4 >>>chars['x'] 0 
 str = "count a character occurance" List = list(str) print (List) Uniq = set(List) print (Uniq) for key in Uniq: print (key, str.count(key)) 
 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)) 

没有比这个恕我直言,你可以添加上面或下面的方法

 def count_letter_in_str(string,letter): return string.count(letter) 

这会给你一个string中每个字符的出现。 O / P也是string格式:

 def count_char(string1): string2="" lst=[] lst1=[] for i in string1: count=0 if i not in lst: for j in string1: if i==j: count+=1 lst1.append(i) lst1.append(count) lst.append(i) string2=''.join(str(x) for x in lst1) return string2 print count_char("aabbacddaabbdsrchhdsdg") 

count绝对是计算string中字符出现的最简洁高效的方法,但是我试图用lambda来解决这个问题,就像这样:

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

这将导致:

 4 

另外,还有一个优点是,如果句子是一个包含上面相同字符的子string列表,那么由于使用in ,这也给出了正确的结果。 看一看 :

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

这也导致:

 4 

但是,这当然只有在这种特殊情况下检查单个字符(如'a'出现时才有效。