2010-07-12 16 views
27

Tengo una lista de objetos anexados de una base de datos mysql y contienen espacios. Deseo eliminar los espacios como a continuación, pero el uso de código im no funciona?Python: Eliminar espacios de los objetos de lista

hello = ['999 ',' 666 '] 

k = [] 

for i in hello: 
    str(i).replace(' ','') 
    k.append(i) 

print k 
+2

O fijar el tipo del campo de base de datos ;-) – ChristopheD

+0

@ChristopheD: ¿Qué base de datos de "campo" fuerzas de tipo ** ** líder espacios? Mejor arreglar el desarrollador y el probador. –

+1

@Johan Machin: Hice mal el espacio principal en la segunda entrada (juzgado un poco demasiado rápido, vaya) – ChristopheD

Respuesta

63

cadenas en Python son inmutables (lo que significa que sus datos no pueden ser modificados) por lo que la reemplace método no modifica la cadena - devuelve una nueva cadena. Puede corregir su código de la siguiente manera:

for i in hello: 
    j = i.replace(' ','') 
    k.append(j) 

Sin embargo, una mejor manera de lograr su objetivo es utilizar una lista de comprensión. Por ejemplo, el código siguiente quita espacios iniciales y finales de cada cadena en la lista mediante strip:

hello = [x.strip(' ') for x in hello] 
+7

+1 por tira. -1 para reemplazar ('', '') –

+1

OP quiere eliminar * todos * espacios, no solo trailers, entonces ¿por qué -1 para 'replace ('', '')'? Ninguno de los métodos 'strip', mucho menos los otros [métodos str incorporados] (http://docs.python.org/library/stdtypes.html#string-methods), hacen el trabajo (ignorando a Rube Goldbergs como ' '' .join (s.split()) '). –

+0

Ah, ¿entonces no es un campo de texto que utilizó espacios para separar miles, millones, etc. que se define como texto porque podría contener una palabra clave ocasional? OK, me lo perdí. –

5

resultado = map (lambda x: x.strip(), hola)

+3

No es necesario utilizar el 'lambda'; en su lugar, podría usar: 'result = map (str.strip(), hello)'. Sin embargo, como se menciona por @riza, en Python 3 map devuelve un iterador en lugar de una lista. Entonces, la mejor práctica sería 'result = list (map (str.strip(), hello))'. – amicitas

+1

Tenga en cuenta que (al menos en Python 3) debe decir 'map (str.strip, mylist)' not 'map (str.strip(), mylist)'. – William

2

métodos cadena de retorno la cadena modificada.

k = [x.replace(' ', '') for x in hello] 
0

replace() no funciona en el lugar, debe asignar su resultado a algo. Además, para una sintaxis más concisa, podría suplantar a su bucle con una sola línea: hello_no_spaces = map(lambda x: x.replace(' ', ''), hello)

1

Suponiendo que usted no desea eliminar espacios internos:

def normalize_space(s): 
    """Return s stripped of leading/trailing whitespace 
    and with internal runs of whitespace replaced by a single SPACE""" 
    # This should be a str method :-(
    return ' '.join(s.split()) 

replacement = [normalize_space(i) for i in hello] 
6

Lista comprensión [num.strip() for num in hello] es el más rápido .

>>> import timeit 
>>> hello = ['999 ',' 666 '] 

>>> t1 = lambda: map(str.strip, hello) 
>>> timeit.timeit(t1) 
1.825870468015296 

>>> t2 = lambda: list(map(str.strip, hello)) 
>>> timeit.timeit(t2) 
2.2825958750515269 

>>> t3 = lambda: [num.strip() for num in hello] 
>>> timeit.timeit(t3) 
1.4320335103944899 

>>> t4 = lambda: [num.replace(' ', '') for num in hello] 
>>> timeit.timeit(t4) 
1.7670568718943969 
+0

'list (map (str.strip, hello))' no tiene mucho sentido ya que 'map' devuelve una lista. – ChristopheD

+1

@ChristopheD: en Python 3, el mapa no devuelve una lista. – riza

0
for element in range(0,len(hello)): 
     d[element] = hello[element].strip() 
+2

Además de su código, explique por qué funciona su respuesta y cómo resuelve el problema. – buczek

Cuestiones relacionadas