2011-04-25 13 views
12

Ok, próbuję dowiedzieć się, jak zrobić inputed frazy takie jak to w python ....Jak znaleźć pierwszą literę każdego słowa?

Samodzielne podwodny aparat oddechowy

wyjście to ...

SCUBA

Która byłaby pierwszą literą każdego słowa. Czy to ma coś wspólnego z indeksem? i może funkcja .perper?

+1

prawdopodobnie masz do tokenize słów zamiast używania split() Jeśli wejście są bardziej skomplikowane IE Samodzielny ... ' – goh

Odpowiedz

16

Oto najszybszy sposób, aby zrobić to

input = "Self contained underwater breathing apparatus" 
output = "" 
for i in input.upper().split(): 
    output += i[0] 
+4

lub jako lista zrozumieniem:' first_letters = [I [0] .upper() dla i w input.split()]; output = "" .join (first_letters) ' –

+0

Działa ale nieefektywnie, konstruuje nową instancję łańcucha w każdej iteracji pętli. – sateesh

+0

Niesamowite dzięki bardzo! – Pr0cl1v1ty

5
#here is my trial, brief and potent! 
str = 'Self contained underwater breathing apparatus' 
reduce(lambda x,y: x+y[0].upper(),str.split(),'') 
#=> SCUBA 
+0

'zmniejszyć' na składane ciągi? ಠ_ಠ –

+2

to działa! W każdym razie, prawdopodobnie jestem źle ugryziony przez Haskell owadów :-) – nemesisfixx

0
s = "Self contained underwater breathing apparatus" 
for item in s.split(): 
    print item[0].upper() 
+3

To jest rzeczywiście źle, bo to będzie wyjścia 's \ n C \ n U \ n B \ n A \ n' –

0

Niektóre lista rozumienie miłości:

"".join([word[0].upper() for word in sentence.split()]) 
+1

Dlaczego niepotrzebny ciąg format? Dlaczego nie po prostu 'word [0] .upper()'? –

+0

oops, który był reliktem czegoś innego, co próbowałem. – manojlds

18

To jest pythonic sposób to zrobić:

output = "".join(item[0].upper() for item in input.split()) 
# SCUBA 

Proszę. Krótki i łatwy do zrozumienia.

LE: Jeśli masz inne ograniczniki niż przestrzeń, można podzielić przez słowy, podobnie jak to:

import re 
input = "self-contained underwater breathing apparatus" 
output = "".join(item[0].upper() for item in re.findall("\w+", input)) 
# SCUBA 
+2

Tak, wyrażenie sprzężenia i generatora jest zdecydowanie "prawidłowym" sposobem. Choć byłoby nieco bardziej wydajne wywoływanie '.upper()' na całym wyjściu, niż na każdym znaku. –

3

pythonowy Idiomy

  • Korzystanie wyrażenie generator nad ul. split()
  • Zoptymalizuj wewnętrzną pętlę, przesuwając górną() do jednego połączenia na zewnątrz pętli.

Realizacja:

input = 'Self contained underwater breathing apparatus' 
output = ''.join(word[0] for word in input.split()).upper() 
0

Innym sposobem

input = Self contained underwater breathing apparatus

output = "".join(item[0].capitalize() for item in input.split())

0

Innym sposobem, który może być bardziej łatwe dla początkujących, aby zrozumieć całkowite:

acronym = input('Please give what names you want acronymized: ') 
acro = acronym.split() #acro is now a list of each word 
for word in acro: 
    print(word[0].upper(),end='') #prints out the acronym, end='' is for obstructing capitalized word to be stacked one below the other 
print() #gives a line between answer and next command line's return 
Powiązane problemy