Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算字符串中字符的出现次数_Python_String_Count - Fatal编程技术网

Python 计算字符串中字符的出现次数

Python 计算字符串中字符的出现次数,python,string,count,Python,String,Count,计算字符串中字符出现次数的最简单方法是什么 e、 g.计算“a”在“Mary had a little lamb”中出现的次数,可能是正则表达式 import re my_string = "Mary had a little lamb" len(re.findall("a", my_string)) 返回子字符串sub在[开始,结束]范围内不重叠的出现次数。可选参数start和end被解释为切片表示法 您可以使用: 更多信息Python-3.x: "aabc".count("a") 返

计算字符串中字符出现次数的最简单方法是什么


e、 g.计算“a”在“Mary had a little lamb”中出现的次数,可能是正则表达式

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

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

您可以使用:

更多信息

Python-3.x:

"aabc".count("a")

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


正如其他答案所说,使用string方法count()可能是最简单的,但如果您经常这样做,请查看:


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

请注意,正则表达式版本的运行时间大约是10倍,只有当my_字符串非常长,或者代码位于深循环中时,这才可能是一个问题。

“不使用count查找字符串中的字符”方法


仅此IMHO-您可以添加upper或lower方法

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

这项工作的更好方法是:

from collections import defaultdict

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

for char in text:
    chars[char] += 1
因此,您将有一个dict,它返回字符串中每个字母的出现次数,如果不存在,则返回
0

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

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


count
无疑是计算字符串中字符出现次数的最简洁有效的方法,但我尝试使用
lambda
想出一个解决方案,如下所示:

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

4
此外,这还有一个好处,即如果句子是包含与上述相同字符的子字符串列表,那么由于在中使用了
,因此也会给出正确的结果。看看:

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] = 0
  counts_dict[c] += 1

for key, value in counts_dict.items():
    print(key, value)
Python 3

实现这一点有两种方法:

1)具有内置函数count()

2)不使用函数

sentence = 'Mary had a little lamb'    
count = 0

for i in sentence:
    if i == "a":
        count = count + 1

print(count)

我是pandas库的粉丝,尤其是
value\u counts()
方法。您可以使用它来计算字符串中每个字符的出现次数:

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

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

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

利用内置的求和、生成器理解和bool是integer的子类这一事实:may-times字符如何等于‘a’。

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

a = "I walked today,"
c=['d','e','f']
count=0
for 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()] + 1
    else:
        count[i.lower()] = 1
print(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

一个好主意,但在这种情况下太过分了。字符串方法“count”也做了同样的事情,额外的好处是它能立即清楚地知道它在做什么。为什么是负速率,也许有人需要类似的代码。我的投票结果应该被否决,因为这是计算字符串中字符数的最不有效的方法。如问题所示,如果目标仅仅是计数字符,那么很难找到更糟糕的方法来完成这项工作。就内存和处理器开销而言,这种解决方案是绝对可以避免的。没有人会“需要”使用此方法来查找字符串中的字符数。当字符串方法不可用时,这是一个很好的解决方案:
len(re.findall('1',bin(10))
为什么经常使用此方法更好?优点是什么?若您想要一个给定字符串中许多字母的计数,计数器将以更简洁的形式提供它们。如果您想从许多不同的字符串中计算一个字母的计数,计数器没有任何好处。对于这个特殊的实例,计数字符,我更喜欢collections.Counter。为了查找特定子字符串的实例,我将使用正则表达式或str.count()方法。我还没有测试过,但是可能会有性能上的差异,因为在计算所有字符和附加到字典中时会有轻微的开销,而不是计算单个子字符串的出现次数。我建议编写一个脚本来生成一个很长的文件进行搜索,然后对每个方法的执行进行计时。经常使用的优点是计数器一次计算所有计数,这几乎和mystring.count('a')一次计算一样快。因此,如果你这样做20次,你可能会节省10倍的计算时间。计数器还可以告诉您某个项是否在字符串中:例如,如果您只是试图解决大小写敏感问题,那么计数器中的“a”Regex是否过多。我的_sting.lower().count('m')更高效、更清晰、更简洁。为什么使用空count函数?为什么使用main()函数?为什么到处都是丑陋的空间?这不是一个好答案。您基本上是在重新实现
计数器
,它已经是
集合中的一个类了
Counter
是一个更加臃肿的纯Python类,而
defaultdict
\uuuuuu missing\uuuu
则是。对于像这样的简单任务(
int
也是imp
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)}
counts_dict = {}
for c in list(sentence):
  if c not in counts_dict:
    counts_dict[c] = 0
  counts_dict[c] += 1

for key, value in counts_dict.items():
    print(key, value)
sentence = 'Mary had a little lamb'
print(sentence.count('a'))`
sentence = 'Mary had a little lamb'    
count = 0

for i in sentence:
    if i == "a":
        count = count + 1

print(count)
>>> import pandas as pd
>>> phrase = "I love the pandas library and its `value_counts()` method"
>>> pd.Series(list(phrase)).value_counts()
     8
a    5
e    4
t    4
o    3
n    3
s    3
d    3
l    3
u    2
i    2
r    2
v    2
`    2
h    2
p    1
b    1
I    1
m    1
(    1
y    1
_    1
)    1
c    1
dtype: int64
>>> my_string = "Mary had a little lamb"
>>> sum(char == 'a' for char in my_string)
4
a = "I walked today,"
c=['d','e','f']
count=0
for 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()] + 1
    else:
        count[i.lower()] = 1
print(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