uso rstrip español python string list iterator strip

rstrip - ¿Hay una mejor manera de usar strip() en una lista de cadenas?-python



strip python 3 español (4)

Esta pregunta ya tiene una respuesta aquí:

Por ahora he estado tratando de realizar strip () en una lista de cadenas y he hecho esto:

i = 0 for j in alist: alist[i] = j.strip() i+=1

¿Hay una mejor manera de hacerlo?


Algunas discusiones interesantes sobre el rendimiento sucedieron aquí, así que permítanme proporcionar un punto de referencia:

http://ideone.com/ldId8

noslice_map : 0.0814900398254 slice_map : 0.084676027298 noslice_comprehension : 0.0927240848541 slice_comprehension : 0.124806165695 iter_manual : 0.133514881134 iter_enumerate : 0.142778873444 iter_range : 0.160353899002

Asi que:

  1. map(str.strip, my_list) es la forma más rápida, es solo un poco más rápido que las comperhensions.
    • Use map o itertools.imap si hay una sola función que desea aplicar (como str.split)
    • Usa las comprensiones si hay una expresión más complicada.
  2. La iteración manual es la forma más lenta; una explicación razonable es que requiere que el intérprete haga más trabajo y que el tiempo de ejecución eficiente de C haga menos
  3. my_list[:] = map... y asigne el resultado como my_list[:] = map... , la notación de la porción solo introduce una pequeña sobrecarga y es probable que le ahorre algunos errores si hay varias referencias a esa lista.
    • Conoce la diferencia entre mutar una lista y volver a crearla.

Creo que quieres decir

a_list = [s.strip() for s in a_list]

Usar una expresión generadora puede ser un mejor enfoque, como este:

stripped_list = (s.strip() for s in a_list)

ofrece el beneficio de la evaluación perezosa, por lo que la strip solo se ejecuta cuando se necesita el elemento dado, eliminado.

Si necesita referencias a la lista para que permanezca intacta fuera del alcance actual, es posible que desee utilizar la sintaxis de la porción de lista:

a_list[:] = [s.strip() for s in a_list]

Para los comentaristas interesados ​​en la velocidad de los diferentes enfoques, parece que en CPython el enfoque generador a corte es el menos eficiente:

>>> from timeit import timeit as t >>> t("""a[:]=(s.strip() for s in a)""", """a=[" %d " % s for s in range(10)]""") 4.35184121131897 >>> t("""a[:]=[s.strip() for s in a]""", """a=[" %d " % s for s in range(10)]""") 2.9129951000213623 >>> t("""a=[s.strip() for s in a]""", """a=[" %d " % s for s in range(10)]""") 2.47947096824646


Podrías usar listas de comprensión.

stripped_list = [j.strip() for j in initial_list]


Probablemente no debería usar la list como nombre de variable ya que es un tipo. Sin importar:

list = map(str.strip, list)

Esto aplicará la función str.strip a cada elemento de la list , devolverá una nueva lista y almacenará el resultado nuevamente en la list .