计算字符串中一个字符的出现次数

如何计算字符串中字符的出现次数?

例如'a''Mary had a little lamb'中出现4次。

1505368 次浏览

也许是正则表达式?

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

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

返回[start, end]范围内子字符串sub的非重叠出现次数。可选参数startend被解释为切片表示法。

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

您可以使用#0

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

更多信息这里

python-3. x:

"aabc".count("a")

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

返回[start, end]范围内子字符串sub的非重叠出现次数。可选参数start和end被解释为切片表示法。

要获得所有个字母的计数,请使用#0

>>> from collections import Counter>>> counter = Counter("Mary had a little lamb")>>> counter['a']4

如果您想要不区分大小写(当然还有regex的所有功能),则正则表达式非常有用。

my_string = "Mary had a little lamb"# simplest solution, using count, is case-sensitivemy_string.count("m")   # yields 1import re# case-sensitive with regexlen(re.findall("m", my_string))# three ways to get case insensitivity - all yield 2len(re.findall("(?i)m", my_string))len(re.findall("m|M", my_string))len(re.findall(re.compile("m",re.IGNORECASE), my_string))

请注意,regex版本需要十倍的时间才能运行,只有当my_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()
a = 'have a nice day'symbol = 'abcdefghijklmnopqrstuvwxyz'for key in symbol:print(key, a.count(key))
spam = 'have a nice day'var = 'd'

def count(spam, var):found = 0for key in spam:if key == var:found += 1return foundcount(spam, var)print 'count %s is: %s ' %(var, count(spam, var))

不超过这个IMHO-您可以添加上层或下层方法

def count_letter_in_str(string,letter):return string.count(letter)

这是已接受答案的扩展,您应该查找文本中所有字符的计数。

# Objective: we will only count for non-empty characters
text = "count a character occurrence"unique_letters = set(text)result = dict((x, text.count(x)) for x in unique_letters if x.strip())
print(result)# {'a': 3, 'c': 6, 'e': 3, 'u': 2, 'n': 2, 't': 2, 'r': 3, 'h': 1, 'o': 2}

str.count(a)是计算字符串中单个字符的最佳解决方案。但是如果您需要计算更多字符,则必须读取整个字符串的次数与您想要计算的字符的次数相同。

这项工作的更好方法是:

from collections import defaultdict
text = 'Mary had a little lamb'chars = defaultdict(int)
for char in text:chars[char] += 1

因此,您将有一个返回字符串中每个字母出现次数的字典,如果不存在,则返回0

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

对于不区分大小写的计数器,您可以通过子类化defaultdict(基类的方法是只读的)来覆盖Mutator和访问器方法:

class CICounter(defaultdict):def __getitem__(self, k):return super().__getitem__(k.lower())
def __setitem__(self, k, v):super().__setitem__(k.lower(), v)

chars = CICounter(int)
for char in text:chars[char] += 1
>>>chars['a']4>>>chars['M']2>>>chars['x']0

#0绝对是计算字符串中字符出现次数的最简洁有效的方法,但我尝试使用#1提出解决方案,如下所示:

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')的出现时,这才有效。

这个简单而直接的功能可能会有所帮助:

def check_freq(x):freq = {}for c in set(x):freq[c] = x.count(c)return freq
check_freq("abbabcbdbabdbdbabababcbcbab"){'a': 7, 'b': 14, 'c': 3, 'd': 3}

如果需要理解:

def check_freq(x):return {c: x.count(c) for c in set(x)}

一种无需使用Counter()count和regex即可获取所有字符计数的替代方法

counts_dict = {}for c in list(sentence):if c not in counts_dict:counts_dict[c] = 0counts_dict[c] += 1
for key, value in counts_dict.items():print(key, value)

python3

有两种方法可以实现这一点:

1)具有内置函数count()

sentence = 'Mary had a little lamb'print(sentence.count('a'))`

2)不使用函数

sentence = 'Mary had a little lamb'count = 0
for i in sentence:if i == "a":count = count + 1
print(count)

我是熊猫库的粉丝,特别是value_counts()方法。你可以用它来计算字符串中每个字符的出现次数:

>>> import pandas as pd>>> phrase = "I love the pandas library and its `value_counts()` method">>> pd.Series(list(phrase)).value_counts()8a    5e    4t    4o    3n    3s    3d    3l    3u    2i    2r    2v    2`    2h    2p    1b    1I    1m    1(    1y    1_    1)    1c    1dtype: int64

我不知道“最简单”但简单的理解可以做到:

>>> my_string = "Mary had a little lamb">>> sum(char == 'a' for char in my_string)4

利用内置的sum,生成器理解和bool是整数子类的事实:如何乘以字符等于'a'。

a = "I walked today,"c=['d','e','f']count=0for i in a:if str(i) in c:count+=1
print(count)

我知道要求是计算一个特定的字母。我在这里编写通用代码而不使用任何方法。

sentence1 =" Mary had a little lamb"count = {}for i in sentence1:if i in count:count[i.lower()] = count[i.lower()] + 1else:count[i.lower()] = 1print(count)

输出

{' ': 5, 'm': 2, 'a': 4, 'r': 1, 'y': 1, 'h': 1, 'd': 1, 'l': 3, 'i': 1, 't': 2, 'e': 1, 'b': 1}

现在,如果你想要任何特定的字母频率,你可以像下面这样打印。

print(count['m'])2

要查找句子中出现的字符,您可以使用以下代码

首先,我从句子中取出了唯一的字符,然后我计算了句子中每个字符的出现,其中也包括空格的出现。

ab = set("Mary had a little lamb")
test_str = "Mary had a little lamb"
for i in ab:counter = test_str.count(i)if i == ' ':i = 'Space'print(counter, i)

上面代码的输出如下。

1 : r ,1 : h ,1 : e ,1 : M ,4 : a ,1 : b ,1 : d ,2 : t ,3 : l ,1 : i ,4 : Space ,1 : y ,1 : m ,

最简单的方法是在一行中编写代码:

'Mary had a little lamb'.count("a")

如果你也想用这个:

sentence ='Mary had a little lamb'count=0;for letter in sentence :if letter=="a":count+=1print (count)

您可以使用循环和字典。

def count_letter(text):result = {}for letter in text:if letter not in result:result[letter] = 0result[letter] += 1return result

订阅关于此用户的评论:

import numpy as npsample = 'samplestring'np.unique(list(sample), return_counts=True)

外出:

(array(['a', 'e', 'g', 'i', 'l', 'm', 'n', 'p', 'r', 's', 't'], dtype='<U1'),array([1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1]))

检查's'。您可以按如下方式过滤此包含两个数组的元组:

a[1][a[0]=='s']

旁注:它的工作方式类似于collections包的Counter(),只是在numpy中,无论如何你都会导入它。您也可以在单词列表中计算唯一单词。