字符串中的字母计数

22 投票
12 回答
222335 浏览
提问于 2025-04-15 23:18

我是个Python新手。我想计算一个字符串中字母"a"的数量。下面是我的代码。但是在字符串"banana"中,它总是返回1,而不是3。任何建议都很感谢。

def count_letters(word, char):
    count = 0
    while count <= len(word):
        for char in word:
            if char == word[count]:
                count += 1
            return count



print count_letters('banana','a')

12 个回答

7

一种简单的方法如下:

def count_letters(word, char):
    return word.count(char)

或者,还有另一种方法可以直接计算每个元素:

from collections import Counter
Counter('banana')

当然,你也可以指定某一个元素,比如:

Counter('banana')['a']
12

一个问题是,你用 count 来表示你正在检查的单词中的位置,同时也用它来表示你已经看到的 char 的数量。而 char 这个名字你又用来指代你正在检查的输入字符和字符串中的当前字符。建议你使用不同的变量来区分这些内容。

另外,把 return 语句放到循环外面;否则你在检查完第一个字符后就会直接返回,不会继续检查后面的字符。

最后,你只需要一个循环来遍历字符串。去掉外面的 while 循环,这样你就不需要跟踪字符串中的位置了。

根据这些建议,你的代码可以改成这样:

def count_letters(word, char):
  count = 0
  for c in word:
    if char == c:
      count += 1
  return count
45

其他回答已经指出了你代码中的问题。不过,如果你不是单纯为了练习,还有一种内置的方法可以做到这一点:

>>> 'banana'.count('a')
3

Danben 提供了这个修正版本:

def count_letters(word, char):
  count = 0
  for c in word:
    if char == c:
      count += 1
  return count

这里还有一些其他的方法,希望能让你对 Python 有更多的了解!

这是一个类似但更简短的 for 循环。利用了布尔值的特性:如果为真就变成 1,如果为假就变成 0:

def count_letters(word, char):
  count = 0
  for c in word:
    count += (char == c)
  return count

简短的 for 循环通常可以转化为列表/生成器推导式。这会创建一个整数列表,每个字母对应一个数字,如果字母不匹配 char 就是 0,如果匹配就是 1,然后把这些数字加起来:

def count_letters(word, char):
  return sum(char == c for c in word)

下一个方法会过滤掉所有不匹配 char 的字符,并计算剩下的数量:

def count_letters(word, char):
  return len([c for c in word if c == char])

撰写回答