Cách ghép và số lượng các ký tự trong chuỗi là chữ thường là gì?Đếm các ký tự chữ thường trong một chuỗi
Đây là điều đầu tiên mà đến tâm trí:
def n_lower_chars(string):
return sum([int(c.islower()) for c in string])
Cách ghép và số lượng các ký tự trong chuỗi là chữ thường là gì?Đếm các ký tự chữ thường trong một chuỗi
Đây là điều đầu tiên mà đến tâm trí:
def n_lower_chars(string):
return sum([int(c.islower()) for c in string])
lừa Clever của bạn! Tuy nhiên, tôi thấy nó dễ đọc hơn để lọc các ký tự dưới, thêm 1 cho mỗi ký tự.
def n_lower_chars(string):
return sum(1 for c in string if c.islower())
+1 cho phiên bản hoạt động cho các chuỗi byte, chuỗi Unicode, Python 2, Python 3 theo cách hiệu quả về bộ nhớ. – jfs
def n_lower_chars(string):
return sum(map(str.islower, string))
Bạn có thể cắt thời gian tính toán bằng một nửa bằng cách thay thế biểu thức lambda của bạn bằng 'str.islower' –
Chỉ bây giờ tôi mới biết rằng 'Trong [39]: tổng ([True, True, False, False, True]) Out [39 ]: 3' sau khi chạy nó trong trình bao. – iMom0
@JoelCornett gợi ý tốt đẹp - đặt nó ở trên :) –
def n_lower_chars(string):
return len(filter(str.islower, string))
+1. 'filter()' trên Python 2 trả về một chuỗi nếu đầu vào là một chuỗi để nó không ăn nhiều hơn gấp đôi bộ nhớ và nó phải nhanh hơn 'sum()' trên một bộ tạo trong hầu hết các trường hợp. Mặc dù 'len (filter())' phá vỡ trên Python 3, nó trả về một trình lặp. – jfs
Nếu bạn muốn chia điều tinh tế hơn một chút:
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)
bạn đã thử này ra? –
Bạn nên sử dụng máy phát hiểu 'tổng (int (c.islower()) cho c trong chuỗi)' – Akavall
Và bạn không cần phần 'int'. Điều này sẽ làm việc: 'sum (c.islower() cho c trong chuỗi)' – Akavall