Je suis novice en programmation et en Python. Le problème que j'ai est avec la suppression des éléments de la liste qui sont des instances de la classe personnalisée.Copie d'instance de classe personnalisée
import copy
class some_class:
pass
x = some_class()
x.attr1 = 5
y = some_class()
y.attr1 = 5
z = [x,y]
zcopy = copy.deepcopy(z)
z.remove(zcopy[0])
Ce retour: ValueError: list.remove (x): x pas dans la liste
est-il un moyen simple de supprimer l'élément de la liste en utilisant la référence de la liste deepcopied?
edit: Merci pour vos réponses. J'ai trouvé une solution en utilisant l'indexation. Ce n'est pas jolie, mais il fait le travail:
import copy
class some_class:
pass
x = some_class()
x.attr1 = 5
y = some_class()
y.attr1 = 5
z = [x,y]
zcopy = copy.deepcopy(z)
del z[zcopy.index(zcopy[0])]
Vous devriez éviter ce type de copie. Il peut y avoir des moyens plus simples de partitionner une liste. Qu'essayez-vous de faire? –
Fondamentalement, j'utilise des fonctions qui, lorsqu'elles sont appliquées, modifient cette liste en effectuant des calculs (une sorte de simulation de Monte Carlo). Donc, je veux utiliser des fonctions sur une copie de l'instance et supprimer la réponse (que j'ai obtenue en exécutant la simulation) de la liste originale afin que je puisse réexécuter la simulation sur la liste modifiée. liste -> fonction (copie de liste) -> réponse -> supprimer la réponse de la liste originale -> fonction (copie de la liste avec la réponse supprimée) -> ... – declain
Ce n'est pas un très bon design. Vous ne devriez pas mettre les réponses dans la même liste. Vous devez filtrer, créer une nouvelle liste, ne pas mettre à jour une liste existante. Et vous avez rarement besoin de copier quoi que ce soit. Vous devriez poster plus de détails sur votre algorithme afin que nous puissions vous aider à le réparer. –