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])
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])
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. – jfs
def n_lower_chars(string):
return sum(map(str.islower, string))
Lambda ifadenizi 'str.islower' –
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
@JoelCornett güzel öneri - yukarısına koyarak :) –
def n_lower_chars(string):
return len(filter(str.islower, string))
+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
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)
bu denemek mı? –
Jeneratör kavrayışını 'sum (int (c.islower()) c dizgisi için kullanmalısınız)' – Akavall
Ve 'int' kısmına ihtiyacınız yok. Bu işe yarar: 'sum (c dizgesi için c.islower())' – Akavall