3

次の練習問題があります:引数として単語を受け取り、その単語の「a」の数を返す関数 countA(word) を書きます。

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

私の解決策は次のとおりです。

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

そして、それは大丈夫です。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

これはすでに回答されていることは知っていますが、この問題に非常に適しているため、これにカウンターを使用することについて誰も言及していないとは信じられません。オーバーヘッドが少し増えるかもしれませんが、複数の文字を検索したい場合は、おそらく最良の方法です。これは、単純で読みやすいラムダ関数です。

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 に答える