2011-08-01 24 views
183

¿Cuál sería la mejor manera de dividir una cadena en la primera aparición de un delimitador?División en la primera aparición

Por ejemplo:

"123mango abcd mango kiwi peach" 

división en el primer mango llegar:

"abcd mango kiwi peach" 
+0

¿Qué es el delimitador? Usted dice que se está dividiendo, pero ¿dónde está la primera parte? ¡Tu ejemplo no está nada claro! – GaretJax

+1

Lo siento, olvidé mencionar el delimitador! – Acorn

Respuesta

287

De the docs:

str.split([sep[, maxsplit]])

Devuelve una lista de las palabras en la cadena, usando sep como la cadena del delimitador. Si se da maxsplit, como máximo maxsplit se hacen divisiones (por lo tanto, la lista tendrá como máximo maxsplit+1 elementos).

s.split('mango', 1)[1] 
44
>>> s = "123mango abcd mango kiwi peach" 
>>> s.split("mango", 1) 
['123', ' abcd mango kiwi peach'] 
>>> s.split("mango", 1)[1] 
' abcd mango kiwi peach' 
+0

Esto supone el delimitador incorrecto. – Swiss

+4

@Swiss: ¿Y qué? La técnica sigue siendo la misma. –

+4

@Ignacio: Solo lo estoy señalando. No hay razón para tener una respuesta parcialmente correcta en lugar de una completamente correcta. – Swiss

17

Para mí, el mejor enfoque es que:

s.split('mango', 1)[-1] 

... porque si sucede que la ocurrencia no está en la cadena que obtendrá "IndexError: list index out of range"

Por lo tanto -1. no recibirá ningún daño porque el número de ocurrencias ya está establecido en uno.

+0

¿Cuál es el significado de '1' después de 'mango'? – FaCoffee

+0

Tal como está escrito anteriormente, es el número de apariciones en las que se aplica la división de método(). El método encontrará y aplicará solo la primera cadena de 'mango'. – Alex

0

Aquí hay una itertools aproximación:

s = "123mango abcd mango kiwi peach" 
"".join(it.islice(it.dropwhile(lambda x: x != " ", s), 1, None)) 
#'abcd mango kiwi peach' 
Cuestiones relacionadas