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 de bande, transformez-le en:
['this', 'is', 'a', 'list', 'of', 'words']
Je pensais que ce que j'avais écrit fonctionnerait, mais je reçois toujours une erreur 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())
strip_list
19 fois, puis vos lignes supprimées. Ce code a une très mauvaise odeur. De plus, si vous avez obtenu ce contenu à partir d'un fichier, vous devriez le supprimer en cours de route - créer une grande liste, puis le dénigrer dans une autre grande liste n'est pas une bonne idée. Aussi 2, votre code ne devrait pas dépendre de la connaissance de la longueur du mot / ligne le plus long. Reculez un peu - qu'essayez-vous de réaliser? Que ferez-vous avecstrip_list
?Réponses:
la source
str.strip
ne fonctionne que si vous êtes sûr que la liste ne contient pas de chaînes Unicode. S'il peut contenir à la fois des chaînes 8 bits et unicode, utilisezlambda s: s.strip()
comme mentionné ci-dessus ou utilisez lastrip
fonction que vous pouvez importer à partir dustrings
module.list
pour qu'elle soitlist(map(str.strip, my_list))
. Vérifiez également cela: lien .compréhension de la liste?
[x.strip() for x in lst]
la source
Vous pouvez utiliser des listes de compréhension :
Ou la
map
fonction:la source
0
valeurs au début de la liste. Bien que je ne puisse pas vraiment imaginer ce que vous essayez d'accomplir en les mettant dans la même liste de résultats ...strip_list = list(map(str.strip, lines))
comme map () renvoie un itérateur de carte. docs.python.org/3/library/functions.html#mapCela peut être fait en utilisant des compréhensions de liste telles que définies dans PEP 202
la source
list
enmap
:)Toutes les autres réponses, et principalement sur la compréhension des listes, sont excellentes. Mais juste pour expliquer votre erreur:
a
est un membre de votre liste, pas un index. Voici ce que vous pourriez écrire:Autre commentaire important: vous pouvez créer une liste vide de cette façon:
Mais ce n'est pas si utile, car
.append
ajoute des éléments à votre liste. Dans votre cas, il n'est pas utile de créer une liste avec des valeurs par défaut, car vous la construirez élément par élément lors de l'ajout de chaînes supprimées.Donc, votre code devrait être comme:
Mais, bien sûr, le meilleur est celui-ci, car c'est exactement la même chose:
Au cas où vous auriez 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.la source
Si vous devez supprimer uniquement les espaces blancs de fin , vous pouvez utiliser
str.rstrip()
, ce qui devrait être légèrement plus efficace questr.strip()
:la source
Production:
la source