¿Cómo elimino todos los espacios en una cadena de Python? Por ejemplo, quiero strip my spaces
que se convierta una cadena como stripmyspaces
, pero parece que no puedo lograr eso con strip()
:
>>> 'strip my spaces'.strip()
'strip my spaces'
¿Cómo elimino todos los espacios en una cadena de Python? Por ejemplo, quiero strip my spaces
que se convierta una cadena como stripmyspaces
, pero parece que no puedo lograr eso con strip()
:
>>> 'strip my spaces'.strip()
'strip my spaces'
Respuestas:
Aprovechando el comportamiento de str.split sin parámetro sep:
>>> s = " \t foo \n bar "
>>> "".join(s.split())
'foobar'
Si solo desea eliminar espacios en lugar de todos los espacios en blanco:
>>> s.replace(" ", "")
'\tfoo\nbar'
A pesar de que la eficiencia no es el objetivo principal, escribir un código claro sí lo es, aquí hay algunos tiempos iniciales:
$ python -m timeit '"".join(" \t foo \n bar ".split())'
1000000 loops, best of 3: 1.38 usec per loop
$ python -m timeit -s 'import re' 're.sub(r"\s+", "", " \t foo \n bar ")'
100000 loops, best of 3: 15.6 usec per loop
Tenga en cuenta que la expresión regular se almacena en caché, por lo que no es tan lenta como imagina. Compilarlo de antemano ayuda a algunos, pero solo sería importante en la práctica si llama a esto muchas veces:
$ python -m timeit -s 'import re; e = re.compile(r"\s+")' 'e.sub("", " \t foo \n bar ")'
100000 loops, best of 3: 7.76 usec per loop
Aunque re.sub es 11.3 veces más lento, recuerde que sus cuellos de botella están seguramente en otro lugar. La mayoría de los programas no notarían la diferencia entre cualquiera de estas 3 opciones.
\s+
sustitución. Me quedaría con re.
s.translate
método por casualidad? Probablemente supera todos los métodos que se muestran en esta página.
None
- aunque, sorprendentemente, que hace que sea más lento ...
myString.translate(None, " \t\r\n\v")
. Solo toma 83% mientras la técnica más rápida de Roger (dividir y unir). No estoy seguro si cubre todos los caracteres de espacio en blanco que divide, pero probablemente será suficiente para la mayoría de las aplicaciones ASCII.
>>> import re
>>> re.sub(r'\s+', '', 'strip my spaces')
'stripmyspaces'
También maneja los caracteres de espacios en blanco en los que no estás pensando (créeme, hay muchos).
Alternativamente,
"strip my spaces".translate( None, string.whitespace )
Y aquí está la versión de Python3:
"strip my spaces".translate(str.maketrans('', '', string.whitespace))
NameError: name 'string' is not defined
.
import string
string1=" This is Test String to strip leading space"
print string1
print string1.lstrip()
string2="This is Test String to strip trailing space "
print string2
print string2.rstrip()
string3=" This is Test String to strip leading and trailing space "
print string3
print string3.strip()
string4=" This is Test String to test all the spaces "
print string4
print string4.replace(" ", "")
Prueba una expresión regular con re.sub
. Puede buscar todos los espacios en blanco y reemplazarlos con una cadena vacía.
\s
en su patrón coincidirá con los espacios en blanco, y no solo un espacio (pestañas, líneas nuevas, etc.). Puede leer más al respecto en el manual .
import re
re.sub(' ','','strip my spaces')
Como mencionó Roger Pate, el siguiente código funcionó para mí:
s = " \t foo \n bar "
"".join(s.split())
'foobar'
Estoy usando Jupyter Notebook para ejecutar el siguiente código:
i=0
ProductList=[]
while i < len(new_list):
temp='' # new_list[i]=temp=' Plain Utthapam '
#temp=new_list[i].strip() #if we want o/p as: 'Plain Utthapam'
temp="".join(new_list[i].split()) #o/p: 'PlainUtthapam'
temp=temp.upper() #o/p:'PLAINUTTHAPAM'
ProductList.append(temp)
i=i+2
Se aplican las técnicas estándar para filtrar una lista, aunque no son tan eficientes como los métodos split/join
o translate
.
Necesitamos un conjunto de espacios en blanco:
>>> import string
>>> ws = set(string.whitespace)
El filter
incorporado:
>>> "".join(filter(lambda c: c not in ws, "strip my spaces"))
'stripmyspaces'
Una lista de comprensión (sí, use los corchetes: consulte el punto de referencia a continuación):
>>> import string
>>> "".join([c for c in "strip my spaces" if c not in ws])
'stripmyspaces'
Un pliegue:
>>> import functools
>>> "".join(functools.reduce(lambda acc, c: acc if c in ws else acc+c, "strip my spaces"))
'stripmyspaces'
Punto de referencia:
>>> from timeit import timeit
>>> timeit('"".join("strip my spaces".split())')
0.17734256500003198
>>> timeit('"strip my spaces".translate(ws_dict)', 'import string; ws_dict = {ord(ws):None for ws in string.whitespace}')
0.457635745999994
>>> timeit('re.sub(r"\s+", "", "strip my spaces")', 'import re')
1.017787621000025
>>> SETUP = 'import string, operator, functools, itertools; ws = set(string.whitespace)'
>>> timeit('"".join([c for c in "strip my spaces" if c not in ws])', SETUP)
0.6484303600000203
>>> timeit('"".join(c for c in "strip my spaces" if c not in ws)', SETUP)
0.950212219999969
>>> timeit('"".join(filter(lambda c: c not in ws, "strip my spaces"))', SETUP)
1.3164566040000523
>>> timeit('"".join(functools.reduce(lambda acc, c: acc if c in ws else acc+c, "strip my spaces"))', SETUP)
1.6947649049999995
TL / DR
Esta solución fue probada usando Python 3.6
Para quitar todos los espacios de una cadena en Python3, puede usar la siguiente función:
def remove_spaces(in_string: str):
return in_string.translate(str.maketrans({' ': ''})
Para eliminar los caracteres de espacio en blanco ('\ t \ n \ r \ x0b \ x0c') puede usar la siguiente función:
import string
def remove_whitespace(in_string: str):
return in_string.translate(str.maketrans(dict.fromkeys(string.whitespace)))
Explicación
El str.translate
método de Python es un método de clase incorporado de str, toma una tabla y devuelve una copia de la cadena con cada carácter asignado a través de la tabla de traducción aprobada. Documentación completa para str.translate
Para crear la tabla de traducción str.maketrans
se utiliza. Este método es otro método de clase integrado de str
. Aquí lo usamos con un solo parámetro, en este caso un diccionario, donde las claves son los caracteres a ser reemplazados asignados a valores con el valor de reemplazo de caracteres. Devuelve una tabla de traducción para usar con str.translate
. Documentación completa para str.maketrans
El string
módulo en python contiene algunas operaciones de cadena y constantes comunes. string.whitespace
es una constante que devuelve una cadena que contiene todos los caracteres ASCII que se consideran espacios en blanco. Esto incluye el espacio de caracteres, tabulación, salto de línea, retorno, avance de página y tabulación vertical. Documentación completa para cadena
En la segunda función dict.fromkeys
se utiliza para crear un diccionario donde las claves son los caracteres de la cadena devueltos por string.whitespace
cada uno con valor None
. Documentación completa para dict.fromkeys
Si el rendimiento óptimo no es un requisito y solo desea algo absolutamente simple, puede definir una función básica para probar cada carácter utilizando el método "isspace" integrado en la clase de cadena:
def remove_space(input_string):
no_white_space = ''
for c in input_string:
if not c.isspace():
no_white_space += c
return no_white_space
Construir la no_white_space
cadena de esta manera no tendrá un rendimiento ideal, pero la solución es fácil de entender.
>>> remove_space('strip my spaces')
'stripmyspaces'
Si no desea definir una función, puede convertirla en algo vagamente similar con la comprensión de la lista. Tomando prestado de la join
solución de la respuesta superior :
>>> "".join([c for c in "strip my spaces" if not c.isspace()])
'stripmyspaces'