2010-10-01 23 views
39

有一个函数可以大写字符串,我希望能够改变字符串的第一个字符以确保它是小写字母。如何降低字符串的第一个字符?

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

+3

你确定s.lower()不是你想要的吗? 否则你可能会得到奇怪的结果,比如'hELLO'。 – 2010-10-01 16:57:51

+1

'hELLO'就是我一直在寻找的东西。 – Natim 2013-07-31 08:03:21

回答

41

一个班轮它处理空字符串和None

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

>>> func(None) 
>>> '' 
>>> func('') 
>>> '' 
>>> func('MARTINEAU') 
>>> 'mARTINEAU' 
18
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 :-) 
+3

你的原始答案是完美的,但'len(s)== 0'只是bizzare。 – SilentGhost 2010-10-01 15:57:18

+3

@SilentGhost:这是百万种有效的方式之一来说出它的意思。这与它需要解决的问题有关 - 如果字符串长度为零,则不得运行代码,因此明确地说明了我正在测试的内容。我可以说'如果不是s:',但这并不代表问题相当好。 – RichieHindle 2010-10-01 16:00:57

+2

我宁愿'如果不是len(s)'个人,但这只是挑剔 – Daenyth 2010-10-01 16:10:11

3

最简单的方法:

>>> mystring = 'ABCDE' 
>>> mystring[0].lower() + mystring[1:] 
'aBCDE' 
>>> 

更新

一个更加万无一失的解决方案见this answer(由@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("") 
>>> 
+0

是的。我也想知道为什么这是投票。如果出现错误,我会首先想知道。 – 2010-10-01 17:08:20

+3

有一个错误 - 如果你传入一个空字符串,你会返回None,因为你有一个空的return语句。这是不直观的,必然会导致调用代码中的错误。 – 2010-10-02 20:24:41

16
s = "Bobby tables" 
s = s[0].lower() + s[1:] 
+4

+1 Bobby桌子:) – Skilldrick 2010-10-01 15:58:52

+1

'一个妈妈的利用:) :) – st0le 2010-10-01 18:48:11

+0

有没有办法可以编辑这个小写字母而不仅仅是第一个字母?我想我可以做一些像's = s [10] .lower()+ s [11:]'这样的东西,但是这仍然只给我第一个字母而不是第一个字母。 – cosmictypist 2016-01-08 15:06:40

7

有趣的是,所有这些答案不准确capitalize()相反。例如,capitalize('abC')返回Abc而不是AbC。如果你想的capitalize()相反,你需要的东西,如:

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

这样做的(相对)的优点在于它会抛出,如果你的错误:

def uncapitalize(s): 
    if len(s) > 0: 
    s = s[0].lower() + s[1:].upper() 
    return s 
+0

我不认为这是OP – 2010-10-01 17:32:58

+1

@Xavier的意图:你可能是对的,但有趣的是,大写字母与剩下的字符串混合在一起。 – 2010-10-01 22:04:31

+0

是的,这很有趣,值得你的+1 – 2010-11-12 16:52:19

0

我这样写无意中将它传递给不是字符串的东西,如None或空列表。

+0

它将如何引发一个例外,其他解决方案不会?第一次发生错误的机会是当你切片时,所有其他人都会这样做。 – aaronasterling 2010-10-02 06:08:35

+0

并非如此 - 例如,如果您将空白列表传递给接受的答案,则不会引发异常。 – 2010-10-02 09:19:13

3

无需处理特殊情况(我认为的对称性是更Python):

def uncapitalize(s): 
    return s[:1].lower() + s[1:].upper() 
+5

函数中不应该有'.upper()'。 – 2015-05-13 15:49:12

+1

在执行操作之前很容易出错,检查s的长度 – harshil9968 2016-12-28 08:29:45

0

此复制post带领我这里。

如果你已经像下面

l = ['SentMessage', 'DeliverySucceeded', 'DeliveryFailed'] 

所示。然后,在列表中的所有项目的第一个字母转换为一个字符串列表,你可以使用

l = [x[0].lower() + x[1:] for x in l] 

输出

['sentMessage', 'deliverySucceeded', 'deliveryFailed'] 
+0

在这种情况下,甚至不需要使用枚举:列表中的x为l = [x [0] .lower()+ x [1: l)]' – Natim 2017-11-14 09:32:00

+0

@Natim谢谢!只是意识到我不需要'我'! – 2017-11-14 09:35:46

相关问题