计算列表中字母的出现次数

时间:2014-01-16 13:31:55

标签: python

我在python中编写代码,使用列表理解来计算字母在给定序列中出现的次数

例如:

countoccur("s", "ssssdfrtsgjdt" ) 

应该给出5作为输出,因为s发生了五次。我编写了这段代码并得到以下输出:

def countoccur(x,s):
    y=[e for e in s if e==x]
    return y

输出:

['s', 's', 's', 's', 's']

有人可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:3)

Python有更好的工具,但如果你想保留你的代码,只需返回y的len:

def countoccur(x,s):
    y=[e for e in s if e==x]
    return len(y)

Outout:

output: 5

您还可以使用count()

print string.count('s')

findall()

print len(re.findall("s", string))

答案 1 :(得分:2)

您可以简单地使用内置str.count功能,就像这样

def countoccur(char, input_string):
    return input_string.count(char)

print countoccur("s", "ssssdfrtsgjdt" )

我建议使用生成器表达式和sum这样的函数

return sum(1 for e in input_string if e == char)

这可以缩短为以下内容,正如@volcano在评论

中所建议的那样
return sum(e == char for e in input_string)

这是有效的,因为在Python中,True == 1False == 0:)

如果您只想使用理解,

return sum([e == char for e in input_string])

答案 2 :(得分:2)

Python确实附带了所有电池,请尝试使用collections.Counter

In [1]: from collections import Counter

In [2]: s="ssssdfrtsgjdt"

In [3]: Counter(s)
Out[3]: Counter({'s': 5, 'd': 2, 't': 2, 'g': 1, 'f': 1, 'j': 1, 'r': 1})

In [4]: Counter(s)['s']
Out[4]: 5

答案 3 :(得分:0)

要像Fredrik Pihl提到的那样手动编写计数器:

In [60]: from collections import defaultdict
    ...: cnt=defaultdict(int)
    ...: s="ssssdfrtsgjdt"
    ...: for v in s:
    ...:    cnt[v]+=1
    ...: 

In [61]: print cnt['s'], cnt['d']
5 2