Die Liste Verständnis Lösung ist die Pythonic ein, aber es ist eine wichtige Wendung:
mylist[:] = [s.replace(':', '') for s in mylist]
Wenn Sie mylist
zuweisen, die barename, wie in der anderen Antwort, anstatt zu mylist[:]
, das "Ganze-Liste-Slice", wie ich empfehle, du tust wirklich etwas ganz anderes als "Einträge in der Liste zu ersetzen": du machst eine neue Liste und baust nur den Namen an, den du vorher benutzt hast beziehen Sie sich auf die alte Liste.
Wenn auf diese alte Liste mit mehreren Namen (einschließlich Einträge in Containern) verwiesen wird, wirkt sich diese erneute Bindung nicht auf diese aus: Wenn Sie z. B. eine Funktion haben, die mylist
als Argument verwendet wirkt sich nur lokal auf die Funktion aus und ändert nichts an dem, was der Aufrufer als Inhalt der Liste sieht.
Zuordnung zu der ganzen Liste in Scheiben schneiden, mylist[:] = ...
ändert die Liste Objekt anstatt herumschlagen mit Schalt barenames' Bindungen - jetzt diese Liste wirklich verändert wird, und, egal wie man es genannt hat, wird der neue Wert was ist gesehen. Wenn Sie beispielsweise eine Funktion haben, die mylist
als Argument verwendet, ändert die Gesamtliste-Slice-Zuweisung, was der Aufrufer als den Inhalt der Liste sieht.
Der Schlüssel ist, genau zu wissen, welchen Effekt Sie anstreben - am häufigsten werden Sie das Listenobjekt ändern wollen. Wenn Sie also raten müssen, ist normalerweise die Zuweisung von ganzen Listen die beste Schätzung ;-). In Bezug auf die Leistung macht es keinen Unterschied (außer dass die Zuweisung des Barnamens, wenn es sowohl alte als auch neue Listenobjekte beibehält, mehr Speicher für den Zeitraum benötigt, in dem beide Objekte natürlich noch vorhanden sind).
Es funktioniert nicht, da Zeichenfolgen unveränderlich sind. 're_ eigentlich ** gibt ** eine Zeichenkette zurück, aber Sie ordnen sie nicht zu. Lesen Sie die Dokumentation: http://docs.python.org/library/re.html#re –