2010-11-19 16 views

Odpowiedz

25

Można użyć metody capitalize():

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

ten wypisze:

['My', 'Name'] 
+18

capitalize nie robi tego, o co prosi OP. capitalize spowoduje także, że małe litery nie będą pierwszymi literami – lurscher

+6

tak, ta odpowiedź jest myląca: ''naMe'.capitalize() ==' Name'' – Milimetric

12

Można użyć 'my'.title() który powróci 'My'.

przeboleć całą listę, po prostu map nad nim tak:

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

Właściwie .title() sprawia, że ​​wszystkie słowa zaczynają się wielką literą. Jeśli chcesz ściśle ograniczyć pierwszą literę, użyj zamiast tego capitalize(). (To robi różnicę na przykład w „tego słowa” zostanie zmieniona na obu This Word lub This word)

+0

, a także różnica między Frankiem a Frankiem - jak jest tutaj odnotowane http://op.to/How.To.Capitalize.First.Letter+ –

+0

Ponadto, 'str.title' jest prostszym sposobem na określenie' lambda x: x.title() '. – trss

0

Można użyć

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

Nie potrzebujesz 'temp', nic nie robi i tak samo jest z' list [i] = list [i] .capitalize() '- który działałby tylko wtedy, gdy lista OP o nazwie' s 'zostało zmienione na' list' - ale byłaby to zła praktyka, ponieważ spowodowałoby to ukrycie wbudowanej funkcji/typu o tej samej nazwie. Nie wiem, dlaczego umieszczono tam końcowy przecinek na wyciągu ... – martineau

+0

to błąd literowy polegający na umieszczeniu tam przecinka. – Kracekumar

5

To chyba nie ma znaczenia, ale warto to wykorzystać zamiast capitalize() lub title() metody smyczkowych, ponieważ oprócz uppercasing pierwszą literę, ale także małe litery resztę napisu (i to nie robi):

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

+1: ładny połów; jednak dlaczego wyrażenie "if s else" "? Aby uniknąć konkatenacji pustych łańcuchów? Uważam, że to przedwczesna optymalizacja. – tzot

+0

@ ΤΖΩΤΖΙΟΥ: Dzięki. Ta część jest głównie dlatego, że po prostu poprawiłem moją odpowiedź na podobne [pytanie] (http://stackoverflow.com/questions/3840843/how-to-downcase-the-first-charactero-of-a-string-in- python/3847369 # 3847369). Wolę myśleć o nim jako o programowaniu defensywnym, ponieważ może on obsłużyć element listy będący "Brak" (tak, nie, nie ma go ze względu na obawę, że pusty ciąg znaków jest mniejszy niż optymalny). – martineau

+1

Myślę, że obsługa "Brak" w ten sposób jest złą praktyką. Wolałbym mieć wyjątek podniesiony w tym przypadku, niż milczący (prawdopodobnie błędny) pusty ciąg znaków. – dbkaplun

45

Zarówno .capitalize() i .title() zmienia othe r litery w łańcuchu na małe litery.

Oto prosta funkcja, która zmienia tylko pierwszą literę na wielką i pozostawia resztę bez zmian.

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

+1 dzięki za sugestię wbudowanych funkcji! –

+0

Nie zmienia to pierwszej litery _ego elementu element_ na liście pokazanej w pytaniu OP. – martineau

+1

Chociaż LC, '[i [0] .upper() + i [1:] dla i in s]' –

Powiązane problemy