L'ajout transforme ma liste en NoneType
En Python Shell, j'ai entré:
aList = ['a', 'b', 'c', 'd']
for i in aList:
print(i)
et a obtenu
a
b
c
d
mais quand j'ai essayé:
aList = ['a', 'b', 'c', 'd']
aList = aList.append('e')
for i in aList:
print(i)
et a obtenu
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
for i in aList:
TypeError: 'NoneType' object is not iterable
Personne ne sait ce qui se passe? Comment puis-je réparer/contourner?
source d'informationauteur user460847
Vous devez vous connecter pour publier un commentaire.
list.append
est une méthode qui modifie la liste existante. Elle ne renvoie pas à une nouvelle liste, elle retourneNone
comme la plupart des méthodes qui permettent de modifier la liste. Tout simplementaList.append('e')
et votre liste obtiendrez l'élément ajouté.Supprimer votre deuxième ligne
aList = aList.append('e')
et d'utiliser seulementaList.append("e")
cela devrait se débarrasser de ce problème.Généralement, ce que vous voulez est la réponse. Mais si vous voulez le comportement de substitution de la valeur et de la création d'une nouvelle liste (ce qui est raisonnable dans certains cas^), ce que vous pourriez faire à la place est d'utiliser le "splat opérateur", aussi connu comme la liste déballage:
Ou, si vous avez besoin de soutien python 2, utilisez la
+
opérateur:^ Il y a de nombreux cas où vous souhaitez éviter les effets secondaires de la mutation avec
.append()
. Pour l'un, imaginez que vous vouliez ajouter quelque chose à une liste que vous avez pris comme un argument de fonction. Celui qui est à l'aide de la fonction n'a probablement pas s'attendre à ce que la liste qu'ils ont fourni va être changé. En utilisant quelque chose comme ce qui maintient votre fonction "pure" sans "effets secondaires".