我在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']
有人可以帮我解决这个问题吗?
答案 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')
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 == 1
和False == 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