【发布时间】:2010-10-01 15:52:28
【问题描述】:
有一个字符串大写的功能,我希望能够更改字符串的第一个字符以确保它是小写。
如何在 Python 中做到这一点?
【问题讨论】:
-
你确定 s.lower() 不是你想要的吗?否则你可能会得到奇怪的结果,比如'hELLO'。
-
hELLO是我想要的。
有一个字符串大写的功能,我希望能够更改字符串的第一个字符以确保它是小写。
如何在 Python 中做到这一点?
【问题讨论】:
hELLO 是我想要的。
处理空字符串和None:
func = lambda s: s[:1].lower() + s[1:] if s else ''
>>> func(None)
>>> ''
>>> func('')
>>> ''
>>> func('MARTINEAU')
>>> 'mARTINEAU'
【讨论】:
0 或[] 或False。
s = "Bobby tables"
s = s[0].lower() + s[1:]
【讨论】:
s = s[10].lower() + s[11:] 之类的事情,但这仍然只给了我第一个小写字母而不是前 10 个。
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 :-)
【讨论】:
len(s) == 0 很奇怪。
if not s:,但这并不能很好地代表问题。
s[:1].lower() + s[1:] 也适用于空字符串。我同意没有必要处理None。
有趣的是,这些答案都完全与capitalize()相反。例如,capitalize('abC') 返回 Abc 而不是 AbC。如果你想要 capitalize() 的反义词,你需要这样的东西:
def uncapitalize(s):
if len(s) > 0:
s = s[0].lower() + s[1:].upper()
return s
【讨论】:
capitalize 与字符串的其余部分混在一起。
最简单的方法:
>>> 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("")
>>>
【讨论】:
不需要处理特殊情况(我认为对称性更 Pythonic):
def uncapitalize(s):
return s[:1].lower() + s[1:].upper()
【讨论】:
.upper()。
我会这样写:
def first_lower(s):
if s == "":
return s
return s[0].lower() + s[1:]
这有一个(相对的)优点,如果你不小心传递了一些不是字符串的东西,比如None或一个空列表,它会抛出一个错误。
【讨论】:
这个重复的post 带我到这里。
如果您有如下所示的字符串列表
l = ['SentMessage', 'DeliverySucceeded', 'DeliveryFailed']
然后,要转换列表中所有项目的首字母,可以使用
l = [x[0].lower() + x[1:] for x in l]
输出
['sentMessage', 'deliverySucceeded', 'deliveryFailed']
【讨论】:
l = [x[0].lower() + x[1:] for x in list(l)]
先点安装pydash。
import pydash # pip install pydash
assert pydash.lower_first("WriteLine") == "writeLine"
https://github.com/dgilland/pydash
【讨论】: