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

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

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

¿Hay una mejor manera de hacerlo?

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 .

Podrías usar listas de comprensión.

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

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.
    • Conozca 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 scope actual, es posible que desee utilizar la syntax de la porción de lista:

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

Para los comentaristas interesados ​​en la velocidad de varios 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