Eliminar la nueva línea final de los elementos de una lista de cadenas

Tengo que tomar una gran lista de palabras en la forma:

['this\n', 'is\n', 'a\n', 'list\n', 'of\n', 'words\n'] 

y luego usando la función de tira, conviértala en:

 ['this', 'is', 'a', 'list', 'of', 'words'] 

Pensé que lo que había escrito funcionaría, pero sigo recibiendo un error que dice:

El objeto “list” no tiene atributo “strip”

Aquí está el código que probé:

     strip_list = [] for lengths in range(1,20): strip_list.append(0) #longest word in the text file is 20 characters long for a in lines: strip_list.append(lines[a].strip()) 

    Related of "Eliminar la nueva línea final de los elementos de una lista de cadenas"

     >>> my_list = ['this\n', 'is\n', 'a\n', 'list\n', 'of\n', 'words\n'] >>> map(str.strip, my_list) ['this', 'is', 'a', 'list', 'of', 'words'] 

    lista de comprensión? [x.strip() for x in lst]

    Puede utilizar listas de comprensión :

     strip_list = [item.strip() for item in lines] 

    O la función de map :

     # with a lambda strip_list = map(lambda it: it.strip(), lines) # without a lambda strip_list = map(str.strip, lines) 

    Esto se puede hacer usando la lista de comprensión según lo definido en PEP 202

     [w.strip() for w in ['this\n', 'is\n', 'a\n', 'list\n', 'of\n', 'words\n']] 

    Todas las demás respuestas, y principalmente sobre la comprensión de listas, son excelentes. Pero solo para explicar su error:

     strip_list = [] for lengths in range(1,20): strip_list.append(0) #longest word in the text file is 20 characters long for a in lines: strip_list.append(lines[a].strip()) 

    a es un miembro de su lista, no un índice. Lo que podrías escribir es esto:

     [...] for a in lines: strip_list.append(a.strip()) 

    Otro comentario importante: puedes crear una lista vacía de esta manera:

     strip_list = [0] * 20 

    Pero esto no es tan útil, ya que .append agrega cosas a tu lista. En su caso, no es útil crear una lista con valores predeterminados, ya que lo creará un elemento por elemento al agregar cadenas eliminadas.

    Entonces tu código debería ser como:

     strip_list = [] for a in lines: strip_list.append(a.strip()) 

    Pero, desde luego, el mejor es este, ya que es exactamente lo mismo:

     stripped = [line.strip() for line in lines] 

    En caso de que tenga algo más complicado que una simple .strip , ponga esto en una función y haga lo mismo. Esa es la forma más legible de trabajar con listas.

    Si necesita eliminar solo los espacios en blanco al final , podría usar str.rstrip() , que debería ser un poco más eficiente que str.strip() :

     >>> lst = ['this\n', 'is\n', 'a\n', 'list\n', 'of\n', 'words\n'] >>> [x.rstrip() for x in lst] ['this', 'is', 'a', 'list', 'of', 'words'] >>> list(map(str.rstrip, lst)) ['this', 'is', 'a', 'list', 'of', 'words']