计算string中字符的出现次数
计算string中字符出现次数的最简单方法是什么?
例如,计算'Mary had a little lamb'
出现'a'
的次数
str.count(sub [,start [,end]])
在
[start, end]
范围内返回子串sub
的非重叠次数。 可选参数start
和end
被解释为切片符号。
>>> 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'
出现时才有效。