2012-06-08 23 views
6

Kük dizgilerdeki karakter sayısını saymanın en pythonik ve/veya etkin yolu nedir? seninDizgede küçük harf karakterleri sayma

def n_lower_chars(string): 
    return sum([int(c.islower()) for c in string]) 
+0

bu denemek mı? –

+1

Jeneratör kavrayışını 'sum (int (c.islower()) c dizgisi için kullanmalısınız)' – Akavall

+1

Ve 'int' kısmına ihtiyacınız yok. Bu işe yarar: 'sum (c dizgesi için c.islower())' – Akavall

cevap

11

zeki numara:

İşte akla gelen ilk şey bu! Ancak, her biri için 1 ekleyerek daha düşük karakterleri filtrelemek daha kolay okunabilir.

def n_lower_chars(string): 
    return sum(1 for c in string if c.islower()) 
+1

+1. – jfs

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

Lambda ifadenizi 'str.islower' –

+2

ile değiştirerek hesaplama süresini yarı yarıya azaltabilirsiniz Artık şunu biliyorum:' [39]: toplam ([Doğru, Doğru, Yanlış, Doğru]) Çıkış [39 ]: 3'lük kabukta çalıştırdıktan sonra. – iMom0

+0

@JoelCornett güzel öneri - yukarısına koyarak :) –

6
def n_lower_chars(string): 
    return len(filter(str.islower, string)) 
+1

+1. 'Python 2 üzerindeki filter()', giriş bir dize olduğunda bir dizge döndürür, bu nedenle bellek iki katından daha fazla yemez ve çoğu durumda bir jeneratör üzerinde 'sum()' dan daha hızlı olmalıdır. Len (filter()) ', bir yineleyici döndürdüğü Python 3'ü bozar. – jfs

1

biraz daha ince şeyleri bölmek istiyorsanız :

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) 
İlgili konular