Python divide delimitadores consecutivos

El método de split predeterminado en Python trata los espacios consecutivos como un solo delimitador. Pero si especifica una cadena delimitadora, los delimitadores consecutivos no se contraen:

 >>> 'aaa'.split('a') ['', '', '', ''] 

¿Cuál es la forma más sencilla de contraer delimitadores consecutivos? Sé que solo podría eliminar cadenas vacías de la lista de resultados:

 >>> result = 'aaa'.split('a') >>> result ['', '', '', ''] >>> result = [item for item in result if item] 

¿Pero hay una manera más conveniente?

Puede usar una expresión regular como delimitador, como en:

 re.split(pattern, string[, maxsplit=0, flags=0]) 

De los documentos .

Esto es lo más conciso que puedes obtener:

 string = 'aaa' result = [s for s in string.split('a') if s] 

O puedes cambiar a expresiones regulares:

 string = 'aaa' result = re.split('a+', string) 

Podrías usar expresiones regulares:

 re.split(pattern, string[, maxsplit=0, flags=0]) 

como

 re.split('a+', 'aaa') 

Creo que tu solución está perfectamente bien. Aquí hay una equivalente:

 filter(bool, 'aaa'.split('a')) 

Probablemente no tan perspicua como una lista de comprensión, sin embargo.

No, no hay una manera más conveniente. O escribe su propia función de división, o elimina las cadenas vacías.

Pero tu solución parece muy clara y pythonica.

Aunque no es exactamente lo que solicitó, puede deshacerse de todos los tokens no únicos utilizando un set :

 >>> result ['', '', ''] >>> set(result) set([''])