如何改变字符串的第一个字母的大小写?

33
s = ['my', 'name']

我想要将每个元素的第一个字母改为大写。

s = ['My', 'Name']
5个回答

56

.capitalize() 和 .title() 都会将字符串中的其它字母转换为小写。这里有一个简单的函数,它只会将第一个字母转换为大写,而保留其余内容不变。

def upcase_first_letter(s):
    return s[0].upper() + s[1:]

这不会改变在OP问题中显示的列表中_每个元素_的第一个字母。 - martineau
1
虽然 LC,[i[0].upper() + i[1:] for i in s] - Avinash Raj
3
这段代码对于空字符串会产生索引错误。请改用 return s[:1].upper() + s[1:] - aljgom

30

你可以使用 capitalize() 方法:

s = ['my', 'name']
s = [item.capitalize() for item in s]
print s  # print(s) in Python 3

这将打印:

['My', 'Name']

18
capitalize不能实现OP要求的功能。使用capitalize会将非首字母的小写字母也变为大写。 - lurscher
6
是的,这个答案有误导性:'naMe'.capitalize() == 'Name' - Milimetric

14

你可以使用 'my'.title(),它会返回 'My'

要获取完整列表,只需像这样进行映射:

>>> map(lambda x: x.title(), s)
['My', 'Name']

实际上,.title() 会使所有单词首字母大写。如果你想严格限制只有第一个字母大写,可以使用 capitalize()。(这在将'this word' 更改为 This WordThis word 时会产生不同的结果)


以及Frank's和Frank'S之间的区别-如此处所述http://op.to/How.To.Capitalize.First.Letter+ - Cris Stringfellow
此外,str.title 是指定 lambda x : x.title() 更简单的方法。 - trss

6

也许并不重要,但你可能想使用这个方法而不是capitalize()title()字符串方法,因为除了将第一个字母大写外,它还会保持其余部分的大小写不变(而这两个方法会将其余部分都转换为小写):

s = map(lambda e: e[:1].upper() + e[1:] if e else '', s)

注意:在Python 3中,您需要使用:

s = list(map(lambda e: e[:1].upper() + e[1:] if e else '', s))

因为在Python 2中map()返回一个列表,而在Python 3中它返回一个应用于可迭代对象的函数迭代器(iterator),所以你需要自己将其转换成列表。


+1:很好的发现;但是,为什么要使用if s else ''表达式?为了避免连接空字符串吗?我认为这是过早优化。 - tzot
1
我认为这样处理None是不好的编程实践。我宁愿在这种情况下引发异常,也不愿意让(可能错误的)空字符串被静默地传递。 - dbkaplun
2
@martineau,我的抱怨就在于你试图规避鸭子类型。我认为正确的解决方案是 lambda e:e [:1] .upper()+ e [1:] - dbkaplun
1
如果你看一下原始问题,你会发现s是被修改的字符串列表。e只是其中一个元素的参数名称,map()函数将把它传递给在表达式中定义的lambda函数。 - martineau
1
@virtualxtc:这与处理列表中的任何元素有关(预期所有元素都是字符串),这些元素为空""或具有值None。当它们被用作简单的布尔/条件值时,例如在if语句的表达式中,这两种类型的值在Python中的真实性为False。还讨论了一个相关问题,即是否应该自动静默处理这样的值,或者在遇到异常时引发异常。 - martineau
显示剩余3条评论

0

您可以使用

for i in range(len(s)):
   s[i]=s[i].capitalize()
print s

1
你不需要 temp,它不起作用,因此与 list[i]=list[i].capitalize() 相同 -- 只有当 OP 的列表名为 s 被重命名为 list 时才能起作用 -- 但这样做是不好的实践,因为这样会隐藏相同名称的内置函数/类型。不确定为什么在打印语句上放了逗号... - martineau
在那里放逗号是一个笔误错误。 - Kracekumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接