如何在 Python 中检测小写字母?

Posted

技术标签:

【中文标题】如何在 Python 中检测小写字母?【英文标题】:How to detect lowercase letters in Python? 【发布时间】:2012-10-07 18:01:33 【问题描述】:

我需要知道是否有一个函数可以检测字符串中的小写字母。假设我开始编写这个程序:

s = input('Type a word')

是否有一个函数可以让我检测字符串 s 中的小写字母?可能最终将这些字母分配给不同的变量,或者只打印小写字母或小写字母的数量。

虽然这些是我想用它做的事情,但我最感兴趣的是如何检测小写字母的存在。欢迎使用最简单的方法。

【问题讨论】:

if any(c for c in s if c.islower()) 检测到至少存在一个小写字母。 您使用的是 Python 2.x 还是 Python 3.x? 为什么要对@NoctisSkytower 的错误答案投赞成票?应该是any(filter(str.islower, s)) @stanleyli 感谢您指出这一点!一定是第一次打错了。 【参考方案1】:

如果您不想使用这些库并且想要简单的答案,那么代码如下:

  def swap_alpha(test_string):
      new_string = ""
      for i in test_string:
          if i.upper() in test_string:
              new_string += i.lower()

          elif i.lower():
                new_string += i.upper()

          else:
              return "invalid "

      return new_string


user_string = input("enter the string:")
updated = swap_alpha(user_string)
print(updated)

【讨论】:

【参考方案2】:

有很多方法,这里是其中的一些:

    使用预定义的str方法islower()

    >>> c = 'a'
    >>> c.islower()
    True
    

    使用ord()函数检查字母的ASCII码是否在小写字符的ASCII码范围内:

    >>> c = 'a'
    >>> ord(c) in range(97, 123)
    True
    

    检查字母是否等于它的小写形式:

    >>> c = 'a'
    >>> c.lower() == c
    True
    

    检查字母是否在string模块的列表ascii_lowercase中:

    >>> from string import ascii_lowercase
    >>> c = 'a'
    >>> c in ascii_lowercase
    True
    

但这可能还不是全部,如果你不喜欢这些,你可以找到自己的方式:D.

最后,让我们开始检测:

d = str(input('enter a string : '))
lowers = [c for c in d if c.islower()]

# here i used islower() because it's the shortest and most-reliable
# one (being a predefined function), using this list comprehension
# is (probably) the most efficient way of doing this

【讨论】:

这对其他现有答案有什么好处? 第二种和第三种方法上面没有提到【参考方案3】:

您应该使用raw_input 来接受字符串输入。然后使用str 对象的islower 方法。

s = raw_input('Type a word')
l = []
for c in s.strip():
    if c.islower():
        print c
        l.append(c)
print 'Total number of lowercase letters: %d'%(len(l) + 1)

只要做 -

dir(s)

你会发现islowerstr的其他属性

【讨论】:

注意:Python 2.x 中的 raw_input() 在 Python 3.x 中被 input() 替换。这一点很重要,因为作者没有指定他使用的是哪个版本。【参考方案4】:

您可以通过两种不同的方式查找小写字符:

    使用str.islower() 查找小写字符。结合列表推导,您可以收集所有小写字母:

    lowercase = [c for c in s if c.islower()]
    

    你可以使用正则表达式:

    import re
    
    lc = re.compile('[a-z]+')
    lowercase = lc.findall(s)
    

第一个方法返回单个字符的列表,第二个返回一个字符列表

>>> import re
>>> lc = re.compile('[a-z]+')
>>> lc.findall('AbcDeif')
['bc', 'eif']

【讨论】:

第一个 sn-p 不是你想的那样。 看起来更好 )) 顺便说一句,这似乎是 filter 的有效用例 - 到目前为止没有人提及。 @thg435:我认为filter(lambda c: c.islower(), s)filter(methodcaller('islower'), s) 不那么可读,真的。 @thg435 我认为答案应该是 Pythonic。你的……嗯。 @MartijnPieters:filter(str.islower, s) 怎么样?【参考方案5】:

要检查字符是否为小写,请使用strislower 方法。这个简单的命令式程序会打印字符串中的所有小写字母:

for c in s:
    if c.islower():
         print c

请注意,在 Python 3 中,您应该使用 print(c) 而不是 print c


最终可能会将这些字母分配给不同的变量。

为此,我建议您使用列表推导式,尽管您的课程中可能还没有涉及到这一点:

>>> s = 'abCd'
>>> lowercase_letters = [c for c in s if c.islower()]
>>> print lowercase_letters
['a', 'b', 'd']

或者要获得一个字符串,您可以使用''.join 和生成器:

>>> lowercase_letters = ''.join(c for c in s if c.islower())
>>> print lowercase_letters
'abd'

【讨论】:

【参考方案6】:
import re
s = raw_input('Type a word: ')
slower=''.join(re.findall(r'[a-z]',s))
supper=''.join(re.findall(r'[A-Z]',s))
print slower, supper

打印:

Type a word: A Title of a Book
itleofaook ATB

或者您可以使用列表理解/生成器表达式:

slower=''.join(c for c in s if c.islower())
supper=''.join(c for c in s if c.isupper())
print slower, supper

打印:

Type a word: A Title of a Book
itleofaook ATB

【讨论】:

以上是关于如何在 Python 中检测小写字母?的主要内容,如果未能解决你的问题,请参考以下文章

PYTHON编写程序,功能如何把输入的字符串的大写字母变成小写字母,其中的小写字母变成大写字母?

python中如何转大写

Python中如何使生成器函数来用元组返回一个字符串大写字母个数和小写字母个数?

python如何定义函数将小写转换为大写

python如何定义函数将小写转换为大写

Python接收输入一个字符串,统计其中小写字母的个数