Python 3, range().append() retourne une erreur: 'range' de l'objet n'a pas d'attribut 'append'
En Python 2.7 suivantes fonctionne sans problème:
myrange = range(10,100,10)
myrange.append(200)
print(my range)
De sortie: [10,20,30,40,50,60,70,80,90,200]
À l'inverse, en Python 3.3.4 le même extrait de code renvoie l'erreur: 'range' de l'objet n'a pas d'attribut 'append'
Svp quelqu'un pourrait-il expliquer la raison de cette erreur en Python 3.3.4, et, si possible, fournir une solution?
La sortie désirée: [10, 20, 30, 40, 50, 60, 70, 80, 90, 200].
Merci beaucoup à l'avance,
mrj.
OriginalL'auteur MRJ | 2014-03-16
Vous devez vous connecter pour publier un commentaire.
En Python2,
range
renvoie une liste.En Python3,
range
renvoie une objet de la plage.L'objet de la plage n'a pas de méthode append. Pour réparer, convertir l'objet de la plage à une liste:
L'objet range est un itérateur. Il évite à dessein de former une liste de toutes les valeurs étant donné que cela nécessite plus de mémoire, et souvent les gens utilisent
range
simplement pour garder une trace d'un compteur -- une utilisation qui ne nécessite pas la tenue de la liste complète dans la mémoire à la fois.De les docs:
OriginalL'auteur unutbu
Vérifier unutbu's réponse à savoir pourquoi vous ne pouvez pas ajouter à un
range()
.Cependant, gardez
range()
-s de l'itération en utilisantitertools.chain()
au lieu de les forcer à une liste et en les ajoutant à l'époque. Il est plus rapide et plus efficace.Note:
Ici
list(c)
aussi forcé lechain
objet et a été utilisé uniquement à des fins de représentation. Utiliser lechain
objet dans unfor
boucle à la place.Bien sûr, je voulais juste souligner qu'il est recommandé de s'en tenir à des itérateurs aussi longtemps que possible.
OriginalL'auteur SzieberthAdam