Vamos a hacer algunas suposiciones razonables:
(1) que realmente quiere reemplazar cualquier racha de espacios en blanco con un solo espacio (una carrera es de longitud 1 o mayor).
(2) Le gustaría que el mismo código funcione con cambios mínimos en Python 2.X con objetos Unicode.
(3) Usted no quiere que su código de asumir cosas que no están garantizados en la documentación
(4) ¿Le gustaría el mismo código para trabajar con cambios mínimos con objetos Python 3.X str.
La respuesta seleccionada actualmente tiene estos problemas:
(a) cambios " " * 3
-" " * 2
es decir, que elimina espacios duplicados pero no triplicado, cuadruplicado, etc espacios.[Falla requisito 1]
(b) cambia "foo\tbar\tzot"
a "foobarzot"
[falla requisito 1]
(c) cuando se alimenta un objeto Unicode, obtiene TypeError: translate() takes exactly one argument (2 given)
[falla requisito 2]
(d) utiliza string.whitespace[:-1]
[falla el requisito 3; El orden de los caracteres en string.whitespace no está garantizado]
(e) utiliza string.whitespace[:-1]
[falla el requisito 4; en Python 2.X, string.whitespace es '\t\n\x0b\x0c\r '
; en Python 3.x, es '\ t \ n \ r \ x0b \ x0c']
El " ".join(s.split())
respuesta y la respuesta re.sub(r"\s+", " ", s)
no tienen estos problemas.
Eso es infinitamente mejor que mi solución. También espero volverme inmortal algún día. –
Wow. Esto es increíble. Perfecto para lo que estoy haciendo, ya que son cadenas pequeñas. Me pregunto cómo esto funcionaría en grandes conjuntos de datos sin embargo? Sería genial si alguien sabe cómo funciona intrínsecamente :) – Alex
gracias, no sabía sobre el uso de ningún argumento para las carreras de espacios en blanco. ¡¡Enorme!! – MattoTodd