web-dev-qa-db-fra.com

Supprimer la nouvelle ligne de fin des éléments d'une liste de chaînes

Je dois prendre une grande liste de mots sous la forme:

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

puis en utilisant la fonction strip, convertissez-la en:

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

Je pensais que ce que j'avais écrit fonctionnerait, mais je continue à avoir une erreur en disant:

"L'objet 'list' n'a pas d'attribut 'strip'"

Voici le code que j'ai essayé:

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())
106
George Burrows
>>> 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']
179
Sven Marnach

comprendre la liste? [x.strip() for x in lst]

99
yosukesabai

Vous pouvez utiliser listes compréhensions :

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

Ou la fonction map :

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

# without a lambda
strip_list = map(str.strip, lines)
51
Schnouki

Ceci peut être fait en utilisant des listes de compréhension telles que définies dans PEP 202

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

Toutes les autres réponses, et principalement sur la compréhension des listes, sont excellentes. Mais juste pour expliquer votre erreur:

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 est un membre de votre liste, pas un index. Voici ce que vous pourriez écrire:

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

Autre commentaire important: vous pouvez créer une liste vide de cette façon:

strip_list = [0] * 20

Mais ce n'est pas si utile, comme .appendajoute des trucs à votre liste. Dans votre cas, il n'est pas utile de créer une liste avec des valeurs par défaut, car vous allez le créer élément par élément lors de l'ajout de chaînes extraites.

Donc, votre code devrait être comme:

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

Mais, bien sûr, le meilleur est celui-ci, car c'est exactement la même chose:

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

Si vous avez quelque chose de plus compliqué qu'un simple .strip, mettez-le dans une fonction et faites de même. C'est la manière la plus lisible de travailler avec des listes.

3
Joël

Si vous devez supprimer uniquement suivi , vous pouvez utiliser str.rstrip() , qui devrait être légèrement plus efficace 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']
1
Eugene Yarmash