Tengo un código de Python que se divide en comas, pero no elimina el espacio en blanco:
>>> string = "blah, lots , of , spaces, here "
>>> mylist = string.split(',')
>>> print mylist
['blah', ' lots ', ' of ', ' spaces', ' here ']
Prefiero terminar con espacios en blanco eliminados así:
['blah', 'lots', 'of', 'spaces', 'here']
Soy consciente de que podría recorrer la lista y eliminar () cada elemento, pero, como se trata de Python, supongo que hay una manera más rápida, fácil y elegante de hacerlo.
python
whitespace
strip
Mr_Chimp
fuente
fuente
Dividir usando una expresión regular. Tenga en cuenta que hice el caso más general con espacios iniciales. La comprensión de la lista es eliminar las cadenas nulas en la parte delantera y trasera.
Esto funciona incluso si
^\s+
no coincide:He aquí por qué necesitas ^ \ s +:
¿Ves los espacios principales en bla?
Aclaración: arriba usa el intérprete de Python 3, pero los resultados son los mismos en Python 2.
fuente
[x.strip() for x in my_string.split(',')]
es más pitónico para la pregunta formulada. Tal vez hay casos en los que mi solución es necesaria. Actualizaré este contenido si me encuentro con uno.^\s+
necesario? He probado su código sin él y no funciona, pero no sé por qué.re.compile("^\s*,\s*$")
, el resultado es[' blah, lots , of , spaces, here ']
.^\s+
hace. Como puede ver por sí mismo,^\s*,\s*$
tampoco devuelve los resultados deseados. Entonces, si desea dividir con una expresión regular, use^\s+|\s*,\s*|\s+$
.Vine a agregar:
map(str.strip, string.split(','))
pero vio que Jason Orendorff ya lo había mencionado en un comentario .
Al leer el comentario de Glenn Maynard en la misma respuesta, sugiriendo listas de comprensión sobre el mapa, comencé a preguntarme por qué. Asumí que se refería a razones de rendimiento, pero, por supuesto, podría haberlo hecho por razones estilísticas, o algo más (¿Glenn?).
Entonces, una prueba rápida (¿posiblemente defectuosa?) En mi caja aplicando los tres métodos en un bucle reveló:
haciendo
map(str.strip, string.split(','))
el ganador, aunque parece que todos están en el mismo estadio.Ciertamente, aunque el mapa (con o sin lambda) no necesariamente debe descartarse por razones de rendimiento, y para mí es al menos tan claro como una comprensión de la lista.
Editar:
Python 2.6.5 en Ubuntu 10.04
fuente
Simplemente quite el espacio en blanco de la cadena antes de dividirlo.
fuente
"you just, broke this"
.Sé que esto ya ha sido respondido, pero si terminas haciendo esto mucho, las expresiones regulares pueden ser una mejor manera de hacerlo:
El
\s
Coincide con cualquier carácter de espacio en blanco, y acabamos de sustituirla por una cadena vacía''
. Puede encontrar más información aquí: http://docs.python.org/library/re.html#re.subfuente
Esto funciona bien para mi.
fuente
re
(como en las expresiones regulares) permite dividir varios caracteres a la vez:Esto no funciona bien para su cadena de ejemplo, pero funciona bien para una lista separada por comas. Para su cadena de ejemplo, puede combinar el poder re.split para dividir en patrones regex para obtener un efecto de "división en esto o aquello".
Desafortunadamente, eso es feo, pero a
filter
hará el truco:Voila!
fuente
re.split(' *, *', string)
?re.split('[, ]*',string)
para el mismo efecto.[, ]*
deja una cadena vacía al final de la lista. Creo que el filtro sigue siendo algo bueno para tirar allí, o apegarse a la comprensión de la lista como lo hace la respuesta principal.map(lambda s: s.strip(), mylist)
sería un poco mejor que hacer un bucle explícito. O para todo al mismo tiempo:map(lambda s:s.strip(), string.split(','))
fuente
map
, especialmente si lo estás usandolambda
, verifica dos veces para ver si deberías usar una lista de comprensión.map(str.strip, s.split(','))
.fuente
Simplemente, coma o al menos un espacio en blanco con / sin espacios en blanco anteriores / posteriores.
¡Por favor, inténtalo!
fuente
map(lambda s: s.strip(), mylist)
sería un poco mejor que hacer un bucle explícito.O para todo al mismo tiempo:
Eso es básicamente todo lo que necesitas.
fuente