繁体   English   中英

计算列表中字母的出现

[英]counting occurance of an alphabet in a list

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

例如:

countoccur("s", "ssssdfrtsgjdt" ) 

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

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

输出:

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

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

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

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

外出:

output: 5

您也可以使用count()

print string.count('s')

findall()

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

您可以像这样简单地使用内置的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])

Python确实随附了所有电池,请尝试使用集合。

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

如Fredrik Pihl所述,手动编写Counter:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM