如何降低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']