如何将字符串的第一个字符包掉?

Nat*_*tim 58 python string

有一个函数来大写字符串,我希望能够更改字符串的第一个字符,以确保它是小写的.

我怎么能用Python做到这一点?

mar*_*eau 62

处理空字符串的单行和None:

func = lambda s: s[:1].lower() + s[1:] if s else ''

>>> func(None)
>>> ''
>>> func('')
>>> ''
>>> func('MARTINEAU')
>>> 'mARTINEAU'
Run Code Online (Sandbox Code Playgroud)


Jos*_*shD 30

s = "Bobby tables"
s = s[0].lower() + s[1:]
Run Code Online (Sandbox Code Playgroud)


Ric*_*dle 19

def first_lower(s):
   if len(s) == 0:
      return s
   else:
      return s[0].lower() + s[1:]

print first_lower("HELLO")  # Prints "hELLO"
print first_lower("")       # Doesn't crash  :-)
Run Code Online (Sandbox Code Playgroud)

  • @SilentGhost:我们都不知道OP的经验.当某人为您提供可证明有效的代码时,很容易错过极端情况.我更倾向于谨慎而不是提供一个我知道在一般情况下会失败的答案. (5认同)
  • 你原来的答案是完美的,但是`len(s)== 0`只是古怪. (4认同)
  • @SilentGhost:这是一种有效的方式之一,可以说出它的内容.它与它需要解决的问题有关 - 如果字符串的长度为零,则不能运行代码,因此这显然是我正在测试的内容.我本可以说`如果不是s:`但这并不能很好地代表问题. (4认同)
  • 像这样的全面答案往往比简明的教育更好地教育提问者.鉴于提问者问这个问题,指出角落情况是合理的.这是一个额外的知识,提问者可以从答案中拿走,并记住他将来在做类似的功能时. (4认同)
  • @RichieHindle:如果使用切片,可以省略零长度字符串的测试:`s [:1] .lower()+ s [1:]`也适用于空字符串.我同意没有必要处理无. (4认同)
  • 我个人喜欢`if if len(s),但那只是挑剔 (2认同)
  • @RichieHindle:当s == None`的情况怎么样?第一个`if`条件不会抛出错误吗? (2认同)

Adr*_*thy 9

有趣的是,这些答案都没有完全相反capitalize().例如,capitalize('abC')返回Abc而不是AbC.如果你想要相反capitalize(),你需要这样的东西:

def uncapitalize(s):
  if len(s) > 0:
    s = s[0].lower() + s[1:].upper()
  return s
Run Code Online (Sandbox Code Playgroud)

  • @Xavier:你可能是对的,但有趣的是“大写”与字符串的其余部分混在一起。 (2认同)

Man*_*dan 7

最简单的方法:

>>> mystring = 'ABCDE'
>>> mystring[0].lower() + mystring[1:]
'aBCDE'
>>> 
Run Code Online (Sandbox Code Playgroud)

更新资料

请参阅此答案(@RichieHindle提供),以获取更简单的解决方案,包括处理空字符串。该答案None虽然无法解决,所以我认为:

>>> def first_lower(s):
   if not s: # Added to handle case where s == None
   return 
   else:
      return s[0].lower() + s[1:]

>>> first_lower(None)
>>> first_lower("HELLO")
'hELLO'
>>> first_lower("")
>>> 
Run Code Online (Sandbox Code Playgroud)

  • 有一个错误-如果您传入一个空字符串,则返回空,因为您有一个空的return语句。这是不直观的,并且必然导致调用代码中的错误。 (4认同)

Don*_*ell 5

无需处理特殊情况(我认为对称性更像 Pythonic):

def uncapitalize(s):
    return s[:1].lower() + s[1:].upper()
Run Code Online (Sandbox Code Playgroud)

  • 你的函数中不应该有 `.upper()`。 (7认同)
  • @harshil9968 Python 中切片的真正好处之一是,即使索引越界它们也能工作。您可能会得到一个空字符串,但它仍然有效。 (4认同)
  • 容易出错,操作前先检查s的长度 (2认同)