文字列中の小文字の文字数を数える最も効率的かつ/または効率的な方法は何ですか?あなたの文字列中の小文字を数えよう
def n_lower_chars(string):
return sum([int(c.islower()) for c in string])
文字列中の小文字の文字数を数える最も効率的かつ/または効率的な方法は何ですか?あなたの文字列中の小文字を数えよう
def n_lower_chars(string):
return sum([int(c.islower()) for c in string])
賢いトリック:
は、ここで心に来た最初のものです!しかし、下の文字をフィルタリングして、それぞれに1を加えると読みやすくなります。
def n_lower_chars(string):
return sum(1 for c in string if c.islower())
バイナリ文字列、Unicode文字列、Python 2、Python 3を効率的に処理するバージョンでは+1です。 – jfs
def n_lower_chars(string):
return sum(map(str.islower, string))
ラムダ式を 'str.islower'で置き換えることで計算時間を半分にすることができます –
今は' In [39]:sum([True、True、False、False、True])Out [39] ]:3'をシェルで実行した後。 – iMom0
@JoelCornett素晴らしい提案 - 上に置く:) –
def n_lower_chars(string):
return len(filter(str.islower, string))
+1。 Python 2の 'filter()'は、入力が文字列の場合は文字列を返します。したがって、メモリの2倍以上を消費することはなく、ほとんどの場合、ジェネレータよりも 'sum()'より速くなければなりません。 'len(filter())'はPython 3で壊れていますが、イテレータを返します。 – jfs
あなたがもう少し細かく物事を分割したい場合は :
from collections import Counter
text = "ABC abc 123"
print Counter("lower" if c.islower() else
"upper" if c.isupper() else
"neither" for c in text)
あなたはこれを試してみたのですか? –
文字列中のcに対してジェネレータの理解 'sum(int(c.islower())を使うべきです。' – Akavall
'int'部分は必要ありません。これはうまくいくでしょう: 'sum(文字列中のcのためのc.islower())' – Akavall