2010-12-04 182 views
12

En Python, ¿cómo hago un acrónimo de una cadena dada?Creación de acrónimos en Python

igual, cadena de entrada:

'First Second Third' 

Salida:

'FST' 

Estoy intentando algo como:

>>> for e in x: 
     print e[0] 

Pero no está funcionando ... ¿Alguna sugerencia sobre cómo ¿esto puede hacerse? Estoy seguro de que hay una forma adecuada de hacerlo, pero parece que no puedo resolverlo. ¿Tengo que usar re?

Respuesta

11

Trate

print "".join(e[0] for e in x.split()) 

su bucle bucles realidad sobre todos los caracteres en la cadena de x. Si desea recorrer las palabras, puede usar x.split().

+0

la 'división' estar aquí el bit relevante que faltaba en el original. –

+2

¡Solo una diferencia de dos segundos, entonces +1 para ti! – user225312

+0

Gracias, pensé en usar esto pero de alguna manera me estaba apegando a mi propia solución. – user225312

5

Sin re:

>>> names = 'Vincent Vega Jules Winnfield' 
>>> ''.join(x[0] for x in names.split()) 
'VVJW' 
+0

Igual que Sven ... – user225312

2
s = 'First Second Third' 
x = s.split(' ') 
for e in x: 
    print e[0] 

debe hacer el truco.

2

También se puede utilizar

re.split('\W')

para dividir la línea/texto en caracteres que no son de texto. Esto podría ser un poco más robusto.

3

Ahora algo un poco diferente ...

words = "There ain't no such thing as a free lunch." 
acronym = ''.join(word[0] for word in words.upper().split()) 
print acronym 
# TANSTAAFL 

(TANSTAAFL es bastante bien conocido uno, por cierto).

13

Si desea utilizar capitales única

>>>line = ' What AboutMe ' 
>>>filter(str.isupper, line) 
'WAM' 

¿Qué pasa con las palabras que no podrían estar llevando Caps.

>>>line = ' What is Up ' 
>>>''.join(w[0].upper() for w in line.split()) 
'WIU' 

¿Qué pasa solo con las palabras Caps.

>>>line = ' GNU is Not Unix ' 
>>>''.join(w[0] for w in line.split() if w[0].isupper()) 
'GNU' 
+1

'' .join (w [0] .upper() para w en line.split()) debe ser '' .join (w [0] para w en line.split()) .upper() – kevpie

+1

Votación a favor para mostrar cómo realizar múltiples tareas relacionadas. – kindall

2

Si usted quiere hacer las cosas de la manera que es gramaticalmente correcto (independientemente de la configuración regional), utilice title(), a continuación, filter():

acronym = filter(str.isupper, my_string.title()) 

title() es bastante impresionante; hace una cadena con título y es correcta según la configuración regional.

0

Así es como hacer sigla con la expresión regular, dejando números es:

import re 
words = "internet explorer 10" 
print re.sub(r"([a-zA-Z])[a-z,A-Z]+\s*",r"\1",words).upper() 

IE10

Cuestiones relacionadas