문자열에서 소문자 인 문자 수를 세는 가장 파이썬 적이며 효율적인 방법은 무엇입니까? 당신의문자열의 소문자 수를 계산하십시오.
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())
Bytestrings, 유니 코드 문자열, 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. 파이썬 2의'filter()'는 입력이 문자열 일 때 문자열을 반환하므로 메모리를 두 번 이상 먹지 않으며 대부분의 경우 생성기보다'sum()'보다 빠릅니다. 'len (filter())'는 반복자를 반환하는 곳의 파이썬 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)
이 밖으로 시도 했습니까? –
문자열 생성자'sum (int (c.islower())를 사용해야합니다. ' – Akavall
그리고'int '부분은 필요 없습니다. 이것은 작동 할 것이다 :'sum (c.islower() for c for string) ' – Akavall