2013-08-07 5 views
1

Мне нужно написать программу, которая может использовать каждое слово в предложении (которое хранится как список слов), без, влияющее на капитализацию других частей предложения.Капитализация первого письма каждого слова в списке; Bar All-Caps Words

Скажем, например, предложение «привет, я ROB ALSOD». В списке, это было бы:

['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'] 

Это uppercases 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. –