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())
>>> 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']
comprendre la liste? [x.strip() for x in lst]
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)
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']]
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 .append
ajoute 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.
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']