web-dev-qa-db-ja.com

Pythonで文字列の大文字を数える

文字列の大文字を数える方法を見つけようとしています。

私は小文字のみを数えることができました:

def n_lower_chars(string):
    return sum(map(str.islower, string))

私が達成しようとしていることの例:

Type Word: HeLLo                                        
Capital Letters: 3

上記の関数を反転しようとすると、エラーが発生します。

def n_upper_chars(string):
    return sum(map(str.isupper, string))
21
Stevenson

これを行うには、 sumジェネレータ式 、および str.isupper

message = input("Type Word: ")

print("Capital Letters: ", sum(1 for c in message if c.isupper()))

以下のデモをご覧ください。

>>> message = input("Type Word: ")
Type Word: aBcDeFg
>>> print("Capital Letters: ", sum(1 for c in message if c.isupper()))
Capital Letters:  3
>>>
42
iCodez

lenおよびfilterを使用:

import string
value = "HeLLo Capital Letters"
len(filter(lambda x: x in string.uppercase, value))
>>> 5
7
njzk2

reを使用できます:

import re
string = "Not mAnY Capital Letters"
len(re.findall(r'[A-Z]',string))

5

4
Tapo4ek
from string import ascii_uppercase
count = len([letter for letter in instring if letter in ascii_uppercase])

これは最速の方法ではありませんが、読みやすさが気に入っています。文字列からインポートせず、同様の構文を使用する別の方法は次のとおりです。

count = len([letter for letter in instring if letter.isupper()])
2
mr2ert

これは動作します

s = raw_input().strip()
count = 1
for i in s:
    if i.isupper():
        count = count + 1
print count
1
Samueltommzy

このための(わずかに)最速の方法は、実際にはfrozensetでのメンバーシップテストのようです

import string
message='FoObarFOOBARfoobarfooBArfoobAR'
s_upper=frozenset(string.uppercase)

%timeit sum(1 for c in message if c.isupper())
>>> 100000 loops, best of 3: 5.75 us per loop

%timeit sum(1 for c in message if c in s_upper)
>>> 100000 loops, best of 3: 4.42 us per loop
0
benbo