2011-12-24 13 views
43

Tengo cuatro cadenas y cualquiera de ellas puede estar vacío. Necesito unirlos en una cadena con espacios entre ellos. Si utilizo:Unir varias cadenas si no están vacías en Python

new_string = string1 + ' ' + string2 + ' ' + string3 + ' ' + string4 

El resultado es un espacio en blanco en el inicio de la nueva cadena si string1 está vacía. Además, tengo tres espacios en blanco si string2 y string3 están vacíos.

¿Cómo puedo unirlos fácilmente sin espacios en blanco cuando no los necesito?

Respuesta

100
>>> strings = ['foo','','bar','moo'] 
>>> ' '.join(filter(None, strings)) 
'foo bar moo' 

Mediante el uso de None en la llamada filter(), que elimina todos los elementos Falsy.

-2
strings = ['foo','','bar','moo'] 
' '.join([x for x in strings if x is not '']) 
'foo bar moo' 
+4

Mejor uso '! =' En lugar de 'is not'. Podría funcionar, pero no está garantizado. O simplemente use '[x para x en cadenas si x]'. –

+5

** Nunca ** use 'is not' para no singletons si realmente no desea verificar si ambos son los mismos objetos. – ThiefMaster

9

si se sabe que las cadenas no tienen ningún líder/espacios en blanco finales:

>>> strings = ['foo','','bar','moo'] 
>>> ' '.join(x for x in strings if x) 
'foo bar moo' 

lo contrario:

>>> strings = ['foo ','',' bar', ' ', 'moo'] 
>>> ' '.join(x.strip() for x in strings if x.strip()) 
'foo bar moo' 

y si alguna de las cadenas tienen no conduce espacios en blanco/salida, es posible que deba trabajar aún más. Por favor, aclara qué es lo que realmente tienes.

+0

Las cadenas provienen de los campos de texto de entrada, por lo que todo es posible. ¡Gracias! – Goran

Cuestiones relacionadas