Python,检查字符串中有多少是大写的?

Python,检查字符串中有多少是大写的?,python,string,python-3.x,Python,String,Python 3.x,我有一个文本,我想知道大于50%的所有或百分比是否都是大写的 带触摸屏lorem ipsum的DOFLAMINGO 我尝试使用regex(这里找到了一个解决方案): 但这会找到所有的大写字母,我不知道是否全部或超过50%(包括全部)都是大写字母 我只想给字母编号(所以没有数字、空格、新行等)正则表达式在这里似乎有些过分。可以对生成器表达式使用sum: x = 'DOFLAMINGO WITH TOUCH SCREEN lorem ipsum' x_chars = ''.join(x.split

我有一个文本,我想知道大于50%的所有或百分比是否都是大写的

带触摸屏lorem ipsum的DOFLAMINGO

我尝试使用regex(这里找到了一个解决方案):

但这会找到所有的大写字母,我不知道是否全部或超过50%(包括全部)都是大写字母


我只想给字母编号(所以没有数字、空格、新行等)

正则表达式在这里似乎有些过分。可以对生成器表达式使用
sum

x = 'DOFLAMINGO WITH TOUCH SCREEN lorem ipsum'

x_chars = ''.join(x.split())  # remove all whitespace
x_upper = sum(i.isupper() for i in x_chars) > (len(x_chars) / 2)
或在功能上通过
map

x_upper = sum(map(str.upper, x_chars)) > (len(x_chars) / 2)
或者,通过
统计。平均值

from statistics import mean

x_upper = mean(i.isupper() for i in s if not i.isspace()) > 0.5

以下是一种方法:

f = sum(map(lambda c: c.isupper(), f)) / len(f)
(sum(map(lambda c: c.isupper(), f)) / len(f)) > .50  
您可以使用和清除非字母字符,计算大写字符数并计算比率:

s = 'DOFLAMINGO WITH TOUCH SCREEN lorem ipsum'

alph = list(filter(str.isalpha, s))  # ['D', ..., 'O', 'W', ..., 'N', 'l', 'o', ...]
sum(map(str.isupper, alph)) / len(alph)
# 0.7142857142857143

还可以查看上的文档以及您可能会经常使用的文档。此外,这使用了一个事实,即and被适当地强制转换为求和,这对于某些人来说可能太含蓄了。

适用于任何布尔函数和iterable的通用解决方案(有关只查看
str.isalpha()
的版本,请参见下文):

输出:

62.5  # isupper
25.0  # islower
0.0   # isdigit
12.5  # lambda for spaces
71.42857142857143
28.57142857142857

更好的是Schwobasegl的

return sum(map(boolfunc,data)) / len(data)*100
因为它不需要持久化列表,而是使用生成器


编辑:仅使用str.isalpha字符并允许多个boolfunc的第二个版本:

def percentage2(data, *boolfuncs):
    """Returns how many % of the 'data' returns 'True' for all given boolfuncs.
    Only uses str.isalpha() characters"""
    return (sum(1 for x in data if all(f(x) for f in boolfuncs)) / sum(
                for x in data if str.isalpha(x)))*100

text = "DOFLAMINGO WITH TOUCH SCREEN lorem ipsum"

print( percentage2( text, str.isupper, str.isalpha ))
print( percentage2( text, str.islower, str.isalpha ))
输出:

62.5  # isupper
25.0  # islower
0.0   # isdigit
12.5  # lambda for spaces
71.42857142857143
28.57142857142857

像下面这样的方法应该可以奏效

string = 'DOFLAMINGO WITH TOUCH SCREEN lorem ipsum'
rx = re.sub('[^A-Z]', '', string)
print(len(rx)/len(string))

使用正则表达式,这是一种方法(假设
s
是所讨论的字符串):


它查找大写和小写字符的列表,并使用它们的长度获取百分比。

试试这个,它很短,可以完成以下任务:

text = "DOFLAMINGO WITH TOUCH SCREEN lorem ipsum"
print("Percent in Capital Letters:", sum(1 for c in text if c.isupper())/len(text)*100)
# Percent in Capital Letters: 62.5

或者你可以使用:
statistics.mean(ch.isupper()表示ch in s if not ch.isspace())
@JonClements,是的,很好的观点,但由于
if
条件,我认为有点混乱。好吧,既然你正在逐字符迭代进行isupper检查,我认为做
''有点混乱。join(x.split())
要创建一个新字符串进行迭代:)
(len(上)/len(上)+len(下))
==1+len(下)@Patrick Artner,我错过了一对括号。我将编辑答案。
text = "DOFLAMINGO WITH TOUCH SCREEN lorem ipsum"
print("Percent in Capital Letters:", sum(1 for c in text if c.isupper())/len(text)*100)
# Percent in Capital Letters: 62.5