5

Pregunta sobre python, regex, split, whitespace, strip – División de cadena y eliminación de espacios en blanco Python

Me gustaría dividir una cadena por comas',' y elimine los espacios en blanco desde el principio y el final de cada división.

Por ejemplo, si tengo la cadena:

"QVOD, Baidu Player"

Me gustaría dividir y despojar a:

['QVOD', 'Baidu Player']

¿Hay una manera elegante de hacer esto? Posiblemente usando una lista de comprensión?

@ Kraay89 No es un duplicado de la pregunta a la que se vincula.

de Toby Allen

Posible duplicado deesta pregunta. No completamente, pero puedes encontrar todas las respuestas que necesites allí.

de Kraay89

¿El formato de los datos será el mismo, siempre?

de thefourtheye
2 la respuesta
10

Python tiene una función espectacular llamada

split eso evitará que tenga que usar una expresión regular o algo similar. Puedes dividir tu cadena simplemente llamandomy_string.split(delimiter)

Después de eso Python tiene unastrip Función que eliminará todos los espacios en blanco desde el principio y el final de una cadena.

[item.strip() for item in my_string.split(',')]

Los puntos de referencia para los dos métodos están a continuación:

>>> import timeit
>>> timeit.timeit('map(str.strip, "QVOD, Baidu Player".split(","))', number=100000)
0.3525350093841553
>>> timeit.timeit('map(stripper, "QVOD, Baidu Player".split(","))','stripper=str.strip', number=100000)
0.31575989723205566
>>> timeit.timeit("[item.strip() for item in 'QVOD, Baidu Player'.split(',')]", number=100000)
0.246596097946167

Así que la lista comp es aproximadamente un 33% más rápida que el mapa.

Probablemente también vale la pena señalar que, en lo que se refiere a ser "pitónico", el propio Guido vota por el LC.http://www.artima.com/weblogs/viewpost.jsp?thread=98196

@DanielPilch: ambos métodos producen la misma lista.

de DSM

@SlaterTyranus Por favor, compruebe el código actualizado. Esto podría funcionar casi tan rápido como LC.

de thefourtheye

-0 para los tiempos. No se trata del rendimiento.

de Steven Rumbalski

Sí, tienes razón, estaba imprimiendo un artículo y no creando una lista de la comprensióncategories = [item.strip() for item in my_string.split(',')] Error tonto y sí, es más rápido, gracias!

de Daniel Pilch
4

Un poco de enfoque funcional.>>> stripper = str.strip

Un poco de enfoque funcional.split función, divide la cadena en función de, y los elementos de todos y cada uno serán despojados porstr.strippormap.

>>> stripper = str.strip
>>> map(stripper, "QVOD, Baidu Player".split(","))
['QVOD', 'Baidu Player']

Poca comparacion de tiempo

import timeit
stripper = str.strip
print timeit.timeit('map(stripper, "QVOD, Baidu Player".split(","))', "from __main__ import stripper", number=100000)
print timeit.timeit("[item.strip() for item in 'QVOD, Baidu Player'.split(',')]", number=100000)

Salida en mi máquina

0.553178071976
0.569463968277

Entonces, tanto el método de comprensión de listas comomap Método de realizar casi el mismo.

@pyrospade que no tiene que obtener destr cada vez. Por lo tanto, poco aumento de rendimiento :)

de thefourtheye

@thefourtheye ¿En serio? Me imagino que cuando pasesstr.strip amap(function, sequence) se está asignando a lafunction parámetro y se utiliza localmente como una variable allí.

de pyrospade

Porque estas asignandostr.strip a una variable? ¿Por qué no pasarlo directamente?map(str.strip, "QVOD, Baidu Player".split(","))

de pyrospade

@thefourtheye ¿Qué versión de python estás ejecutando?

de Slater Victoroff

Preguntas relacionadas