如何降低string的第一个字符?

有一个函数来大写一个string,我想能够改变一个string的第一个字符,以确保它是小写字母。

我怎么能在Python中做到这一点?

单线处理空弦和None

 func = lambda s: s[:1].lower() + s[1:] if s else '' >>> func(None) >>> '' >>> func('') >>> '' >>> func('MARTINEAU') >>> 'mARTINEAU' 
 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 :-) 
 s = "Bobby tables" s = s[0].lower() + s[1:] 

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

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

最简单的方法:

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

更新

看到这个答案 (由@RichieHindle)为更加万无一失的解决scheme,包括处理空string。 那个答案虽然没有处理,但是这是我的意思:

 >>> 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("") >>> 

没有必要处理特殊情况(我认为对称性更加Pythonic):

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

我会这样写:

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

这具有(相对)优点,如果你不经意地传递了一个不是string的东西,比如None或者空列表,它将会抛出一个错误。

这个重复的post引导我在这里。

如果你有一个如下所示的string列表

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

然后,要转换列表中所有项目的第一个字母,可以使用

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

产量

 ['sentMessage', 'deliverySucceeded', 'deliveryFailed']