2009-07-20 112 views

回答

920

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

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

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

正则表达式可能吗?

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

一个好主意,但在这种情况下矫枉过正。字符串方法'count'具有相同的功能,并且可以立即明确地表明它正在做什么。 – nilamo 2009-07-20 20:18:02

+15

为什么为负值,也许有人需要这种类似的代码。我的投票 – kiltek 2012-03-31 10:18:17

+2

同意kiltek - 这只是更一般的情况... – 2012-04-01 14:28:00

109

您可以使用count()

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

更多信息here

14
"aabc".count("a") 
77

至于其他的答案说,使用字符串方法数()可能是最简单,但如果你经常这样做,看看collections.Counter:如果你想不区分大小写(当然,所有的正则表达式的功率)

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

正则表达式是非常有用的。

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是极其漫长,或代码是深循环内的顺序。

2

“不使用计数找到你想要的字符串”方法。

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() 
3
a = 'have a nice day' 
symbol = 'abcdefghijklmnopqrstuvwxyz' 
for key in symbol: 
    print key, a.count(key) 
0
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)) 
0

没有比这恕我直言更多 - 你可以添加的上限或下限的方法

def count_letter_in_str(string,letter): 
    return string.count(letter) 
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)) 
3

str.count(a)是一个字符串来计算单个字符的最佳解决方案。但是如果你需要计算比一个更多的字符,那么你必须多次读取字符串作为你想要计数的字符。

这份工作更好的方法是:

from collections import defaultdict 

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

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

所以你必须返回字符串中的每一个字母的ocurrences的0的数目,如果它不存在的字典。

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

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

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

count绝对是一个字符串计数性格发生的最简洁和最有效的方式,但我试图想出了利用溶液lambda ,这样的事情:

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

这将导致:

4 

此外,还有一个优点是,如果句子是包含上述相同字符的子字符串列表,那么由于使用了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'才能运作。

相关问题