2013-08-07 29 views
1

我需要编写一个程序,可以利用句子中的每个单词的大写(存储为单词列表),而不是影响句子其他部分的大写。例如,假设句子是'你好,我是ROB ALSOD'。在列表中,这将是:列表中每个单词的首字母大写; Bar All-Caps Words

['hello,','i','am','ROB','ALSOD'] 

我明白,我可以遍历和使用str.title()方法标题他们,但是这会导致:

['Hello,','I','Am','Rob','Alsod'] 

注意区别?我要去的效果是:

['Hello,','I','Am','ROB','ALSOD'] 

换句话说,我想保留其他大写字母相同。

回答

4

这是一个一行,使用list comprehensions和字符串slicing

>>> words = ['hello,','i','am','ROB','ALSOD'] 
>>> [word[:1].upper() + word[1:] for word in words] 
['Hello,', 'I', 'Am', 'ROB', 'ALSOD'] 

它转换为大写word[:1](一切直到并包括第一个字符),而不是word[0]为了避免(第一个字符本身)如果列表中包含空字符串'',则会出错。

+0

嘿,谢谢!这正是我正在寻找的。 –

0

虽然Zero Piraeus's answer是正确的,但我更倾向于更多的functional syntax避免循环。

>>> words = ['hello,','i','am','ROB','ALSOD'] 
>>> def up(word): return word[:1].upper() + word[1:] 
>>> map(up, words) 
['Hello,', 'I', 'Am', 'ROB', 'ALSOD'] 
+0

在Python 3.x中,'map()'[返回迭代器](http://docs.python.org/3.3/whatsnew/3.0#views-and-iterators-instead-of-lists)而不是列表,所以你的最后一行需要是'list(map(up,words))'。顺便说一下,'map()'不会避免循环,而只是隐藏它们(就像列表解析一样) - 通常,就像在这种情况下一样,对listcomps的性能影响很大。 –

相关问题