python - 如何检查列表中的所有单词是否都是python中的大写

标签 python string list

想知道列表中的单词是否全部大写,即字母字符全部大写。

我尝试用一​​个简单的字符串来理解 isupper() 的行为:

>>> 'FDSFS BBIBIFBIBWEF ASDASD 112,32:/'.isupper()    
True

所以我把那个句子中的单词分成列表:

>>> sent = ['FDSFS','BBIBIFBIBWEF','ASDASD', '112','32:/']
>>> all([word.isupper() for word in sent])
False

所以我检查了 all() 包含的参数列表是什么:

>>> [word.isupper() for word in sent]
[True, True, True, False, False]

奇怪的是,isupper() 对不包含字母(仅由数字和特殊字符组成)的字符串返回 False,但返回 True 如果这些字符串只包含一个大写字符:

>>> '123'.isupper()
False
>>> '123A'.isupper()
True
>>> '123?A'.isupper()
True
>>> '123?'.isupper()
False
>>> ''.isupper()
False

Q1. isupper() 的这种行为背后是否有任何设计决策?
Q2. 我怎样才能以最 pythonic 和最小的方式实现我想做的事情? (也许有任何其他函数只检查输入字符串中的所有字母单词是否都是大写的,而根本不关心特殊字符、数字和空字符串?还是我必须从头开始写一个?)

最佳答案

问题1:

docs 中所述:

Return True if all cased characters in the string are uppercase and there is at least one cased character, False otherwise.

如您所见,它正在检查字符串中的所有字符是否都是大写字母,而不仅仅是字母。

这是一个类似的实现:

import string
def upper(s):
    notlower = all([word not in string.ascii_lowercase for word in s])
    anyupper = any([word in string.ascii_uppercase for word in s])
    return notlower and anyupper
print(upper(s))

问题2:

解决方案一:

解决这个问题的方法可能是使用 upper 并检查它是否等同于原始字符串:

>>> sent = ['FDSFS','BBIBIFBIBWEF','ASDASD', '112','32:/']
>>> all([word.upper() == word for word in sent])
True
>>> 

解决方案 2:

或者检查是否所有字符都不是小写:

>>> sent = ['FDSFS','BBIBIFBIBWEF','ASDASD', '112','32:/']
>>> all([(not word.islower()) for word in sent])
True
>>> 

刚刚意识到@DaniMesejo 发布了这个,感谢他。

解决方案 3:

这也可以用正则表达式非常优雅地完成:

>>> import re
>>> sent = ['FDSFS','BBIBIFBIBWEF','ASDASD', '112','32:/']
>>> expr = re.compile('^[^a-z]*$')
>>> all(map(expr.search, sent))
True
>>> 

使用 map 和编译的正则表达式,可能会更有效率。

关于python - 如何检查列表中的所有单词是否都是python中的大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69513800/

相关文章:

c# - 存储具有相应索引的对象的最有效方法

python - 带有 youtube dl 的不和谐机器人音乐不会卡在网页下载中

python - 将 '10yrs 5mon' 分类值转换为月份

python - TypeError update() 使用 $setOnInsert 获取参数 'upsert' 的多个值

java - kryo 列表序列化

c# - 如何将列表的内容放入单个 MessageBox 中?

python - 如何在python中从mlflow下载工件

java - 如何在 Java 中计算字符串矩阵的乘积?

python - Unicode解码错误: 'ascii' codec can't decode byte 0xaa in position 2370: ordinal not in range(128)

c++ - 查找字符串是否包含 C++ 中的字符(允许 boost )