s = ['my', 'name']
我想要将每个元素的第一个字母改为大写。
s = ['My', 'Name']
.capitalize() 和 .title() 都会将字符串中的其它字母转换为小写。这里有一个简单的函数,它只会将第一个字母转换为大写,而保留其余内容不变。
def upcase_first_letter(s):
return s[0].upper() + s[1:]
你可以使用 capitalize() 方法:
s = ['my', 'name']
s = [item.capitalize() for item in s]
print s # print(s) in Python 3
这将打印:
['My', 'Name']
'naMe'.capitalize() == 'Name'
。 - Milimetric你可以使用 'my'.title()
,它会返回 'My'
。
要获取完整列表,只需像这样进行映射:
>>> map(lambda x: x.title(), s)
['My', 'Name']
实际上,.title()
会使所有单词首字母大写。如果你想严格限制只有第一个字母大写,可以使用 capitalize()
。(这在将'this word' 更改为 This Word
或 This word
时会产生不同的结果)
str.title
是指定 lambda x : x.title()
更简单的方法。 - trss也许并不重要,但你可能想使用这个方法而不是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),所以你需要自己将其转换成列表。
if s else ''
表达式?为了避免连接空字符串吗?我认为这是过早优化。 - tzotNone
是不好的编程实践。我宁愿在这种情况下引发异常,也不愿意让(可能错误的)空字符串被静默地传递。 - dbkaplunlambda e:e [:1] .upper()+ e [1:]
。 - dbkapluns
是被修改的字符串列表。e
只是其中一个元素的参数名称,map()
函数将把它传递给在表达式中定义的lambda
函数。 - martineau""
或具有值None
。当它们被用作简单的布尔/条件值时,例如在if
语句的表达式中,这两种类型的值在Python中的真实性为False
。还讨论了一个相关问题,即是否应该自动静默处理这样的值,或者在遇到异常时引发异常。 - martineau您可以使用
for i in range(len(s)):
s[i]=s[i].capitalize()
print s
temp
,它不起作用,因此与 list[i]=list[i].capitalize()
相同 -- 只有当 OP 的列表名为 s
被重命名为 list
时才能起作用 -- 但这样做是不好的实践,因为这样会隐藏相同名称的内置函数/类型。不确定为什么在打印语句上放了逗号... - martineau
[i[0].upper() + i[1:] for i in s]
- Avinash Rajreturn s[:1].upper() + s[1:]
。 - aljgom