3

我有以下练习:编写函数 countA(word),它将一个单词作为参数并返回该单词中“a”的数量。例子

>>> countA("apple")
1
>>> countA("Apple")
0
>>> countA("Banana")
3

我的解决方案是:

def countA(word):
  return len([1 for x in word if x is 'a'])

没关系。但我不确定这是否是解决此问题的最佳 Pythonic 方法,因为我创建了一个1值列表并检查其长度。任何人都可以建议更多的pythonic吗?

4

5 回答 5

5

假设您不仅被允许使用word.count()- 这是另一种方式 - 可能比对生成器求和更快,并且可以让您根据需要执行多个字母...

def CountA(word):
    return len(word) - len(word.translate(None, 'A'))

或者:

def CountA(word):
    return len(word) - len(word.replace('A', ''))
于 2013-06-26T14:36:35.607 回答
3

用这个

def countA(word):
    return word.count('a')

再举一个例子,myString.count('c')将返回字符串中出现 c 的次数

于 2013-06-26T14:30:18.017 回答
3

在 python 中,字符串是序列(就像一个列表)。

然后你可以使用count

>>> 'Apple'.count('p')
2

使用它,您的练习的答案将是:

def countA(word):
    return word.count('a')
于 2013-06-26T14:30:43.730 回答
2

我知道这已经得到解答,但我不敢相信没有人提到为此使用计数器,因为它非常适合这个问题。它可能会有更多的开销,但如果你想找到多个字母,这可能是最好的方法。这是一个简单易读的 lambda 函数。

from collections import Counter

count = lambda word, letter: Counter(word)[letter]

count("test", "t")
>>> 2
于 2013-08-17T03:02:13.333 回答
1

使用sum

>>> def countA(word):
  return sum(1 for x in word if x == 'a')

>>> countA("apple")
1
>>> countA("Apple")
0
>>> countA("Banana")
3
于 2013-06-26T14:28:02.203 回答