字符串中字母的计数
我在想怎么数一个字符串里特定的字母。首先想到的是 len
这个函数。出于好奇,有没有办法不使用内置函数和 len
来写这个代码呢?
这里有个类似的问题 在这里,我看了之后有点搞不懂。
def count_letters(word, char):
count = 0
for c in word:
if char == c:
count = count + 1
return count
在 if char == c:
和 count += 1
这两行代码里到底发生了什么?我明白为什么要用 for
循环,但我不明白为什么要在后面加一个 if
。
6 个回答
你想要计算特定字符的出现次数。比如说,如果你有单词“hello”和字母“l”,你想要返回2,因为“l”在“hello”中出现了2次。
if
语句就是用来检查这个字符是不是你想要的那个字符。如果是的话,就把计数器加1。for c in word:
这段代码是用来遍历单词中的每一个字符。
Python的语法非常简单易懂,试着把代码读出来,你就能明白它在做什么。
还有另一种方法可以做到这一点:
print len([c for c in word if c == char])
举个例子:
[c for c in 'hello world' if c == 'l']
将会返回:
['l', 'l', 'l']
然后len
会返回3。
你有没有试过看看Python Wiki?
上面说任何有迭代功能的对象都可以被循环遍历,这正好回答了你的第二个问题。
既然你不想用len
这个函数,你可以像你链接的答案那样,使用for循环来遍历对象(这里的对象是字符串word
),寻找字符char
,每次找到char
时就记录一下,使用count
来计数。
参数char
需要在word
这个参数中找到,所以c
只是一个变量,用来依次代表word
中的每个字母(或者字符,因为字符串中的所有部分不一定都是字母)。
使用if
语句的原因是,当循环变量c
等于char
时,就可以执行这个代码块。在这个代码块中,计数器会加一(count = count + 1
),等到for循环结束后,函数会返回count
(也就是char
出现的次数,正好是你想要的统计特定字母在字符串中出现的次数)。
虽然说得有点长,但简单来说,你发的那个函数确实可以告诉你字母在这个单词中出现了多少次。
for c in word:
在这个语句中,单词会被当作一个字符串的列表来处理,c
就是这个列表中的每一个字符。这意味着循环会对单词中的每个字符重复执行。
所以在这个语句中,if char == c:
会把单词中的每个字符和char
进行比较。
如果这个比较结果是对的,那么count
的值就会增加1。
所以,针对你的问题
if char == c:
就是把char
和单词中的每个字符进行比较
而
count+=1
则是把count
的值增加1
字符串有一个内置的 count()
方法:
>>> s = 'aaabbbccc'
>>> s.count('a')
3
>>> s.count('aa')
1
这里提到的 if
是必要的,因为你只想计算特定字符 char
出现的次数。如果没有这个 if
,你就会对字符串中的每一个字符都执行 count = count + 1
,这样你得到的就是整个字符串的长度,而不是你想要的那个特定字符的数量。
代码中的注释:
for c in word: # go through each character in code
if char == c: # if the character is the one we're counting
count = count + 1 # add one to the current count of characters