2013-08-07 59 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的性能影響很大。 –

相關問題