Kann es sein, das du vielleicht lieber ein set() anstatt eine Liste möchtest? Wenn die Ordnung der Liste nicht wichtig ist und du sie benutzt, um gleichartige Elemente festzuhalten, ist eine Menge oft angebrachter. Mengen besitzen eine discard() Funktion, die ein Element entfernt, wenn es schon vorhanden ist und ansonsten nichts tut. add() fügt ein Element nur dann hinzu wenn es nicht bereits vorhanden ist. Willst du also ein Element durch ein anderes ersetzen, welches sich mit einem anderen identifiziert, kannst du discard() und add() hintereinander aufrufen und deckst alle Fälle ab (angenommen, du willst Objekte auch hinzufügen, wenn sie noch nicht vorhanden sind). Mit Mengen und entsprechenden Objekten, die __hash__ und __eq__ / __neq__ implementieren kann man so recht nette Sachen machen.
Code: Alles auswählen
>>> my_set = set()
>>> class A(object):
... def __init__(self, name):
... self.name = name
... def __str__(self):
... return "Name: %s" % self.name
... __repr__ = __str__ # Don't do this at home
... def __hash__(self):
... return 1
... def __eq__(self, other):
... return True
... def __neq__(self, other):
... return not self == other
...
>>> my_set.add(A("First"))
>>> print my_set
set([Name: First])
>>> my_set.add(A("Second"))
>>> print my_set
set([Name: First])
>>> my_set.pop()
Name: First
>>> my_set
set([])
>>> my_set.add(A("Second"))
>>> my_set
set([Name: Second])
>>> my_set.discard(A("Third"))
>>> my_set
set([])
>>> my_set.add(A("Fourth"))
>>> my_set
set([Name: Fourth])
@cofi: Man kann Methoden zu jeder Klasse hinzufügen, die keine Builtin Klasse ist. list.replace = replace funktioniert also nicht.