Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对字符串中的小写字符计数_Python - Fatal编程技术网

Python 对字符串中的小写字符计数

Python 对字符串中的小写字符计数,python,Python,计算一个小写字符串中的字符数的最简单和/或有效的方法是什么 首先想到的是: 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()) 此外,我们不需要为此创建新的列表,因此删除[]将使

计算一个小写字符串中的字符数的最简单和/或有效的方法是什么

首先想到的是:

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())

此外,我们不需要为此创建新的列表,因此删除
[]
将使
sum()
在迭代器上工作,这将消耗更少的内存。

如果您想更精细地划分事物:

def n_lower_chars(string):
    return sum(map(str.islower, string))
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())表示字符串中的c)
并且不需要
int
部分。这将起作用:
sum(c.islower()表示字符串中的c)
无需转换为int。True和False等于1和0,True+True=2。通过将lambda表达式替换为
str.islower
我现在才知道
in[39]:sum([True,True,False,False,True])Out[39]:3
在shell中运行后。@JoelCornett很好的建议-将其放在上面:)+1<如果输入是字符串,Python 2上的code>filter()将返回一个字符串,因此它不会占用超过两倍的内存,并且在大多数情况下,它应该比生成器上的
sum()
更快。尽管
len(filter())
在Python3上中断,它返回一个迭代器。对于以内存高效的方式处理ByTestring、Unicode字符串、Python2、Python3的版本,+1。
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)