Python: Wert in einem Tupel ändern
Ich bin neu in python, so dass diese Frage vielleicht ein wenig basic. Ich habe ein Tupel genannt values
die Folgendes enthält:
('275', '54000', '0.0', '5000.0', '0.0')
Will ich ändern den ersten Wert (D. H., 275
) in diesem Tupel, aber ich verstehe, dass Tupel unveränderlich sind, so values[0] = 200
wird nicht funktionieren. Wie kann ich das erreichen?
InformationsquelleAutor der Frage Dawood | 2012-07-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zuerst müssen Sie sich Fragen, warum Sie dies tun wollen?
Aber es ist möglich über:
Aber wenn Sie gehen zu müssen, um Dinge zu ändern, sind Sie wahrscheinlich besser dran, zu halten, eine
list
InformationsquelleAutor der Antwort Jon Clements
Je nach problem slicing kann eine wirklich saubere Lösung:
Diese können Sie zum hinzufügen mehrerer Elemente oder auch zu ersetzen, ein paar Elemente (vor allem, wenn Sie "Nachbarn". Im obigen Fall der Umwandlung in eine Liste ist wohl eher angebracht und lesbar sind (auch wenn die slicing-Schreibweise ist wesentlich kürzer).
InformationsquelleAutor der Antwort Dave Halter
Gut, wie Trufa hat bereits gezeigt, gibt es grundsätzlich zwei Möglichkeiten, zu ersetzen, einen Tupel-element an einem bestimmten index. Konvertieren Sie die Tupel in eine Liste, ersetzen Sie das element und wieder zurück konvertieren, oder erstellen Sie ein neues Tupel durch Verkettung.
Welche Methode ist besser, d.h. schneller?
Es stellt sich heraus, dass für kurze Tupel (auf Python 3.3), die Verkettung ist tatsächlich schneller!
Doch wenn wir uns länger Tupel -, Listen-Umwandlung ist der Weg zu gehen:
Sehr lange Tupel -, Listen-Konvertierung ist deutlich besser!
Auch, die Leistung der Verkettung Methode hängt von der index, an dem wir ersetzen das element. Für die Liste-Methode, der index ist irrelevant.
So: Wenn Ihr ein Tupel ist kurz, in Scheiben schneiden und zu verketten.
Wenn es lange in der Liste Konvertierung!
InformationsquelleAutor der Antwort sjakobi
Als Jäger McMillen schreibt in die Kommentare, Tupel unveränderlich sind, müssen Sie erstellen ein neues Tupel um dies zu erreichen. Zum Beispiel:
InformationsquelleAutor der Antwort AceLearn
Nicht, dass dies die beste ist, aber wenn jemand neugierig ist, es kann getan werden, auf einer Linie mit:
InformationsquelleAutor der Antwort bphi
EDIT: Dies funktioniert nicht auf Tupel mit doppelten Einträgen noch!!
Basierend auf Pooya Idee:
Wenn Sie planen, tun dies oft (was Sie nicht sollten, da Tupel sind inmutable für einen Grund) sollten Sie so etwas tun:
Oder basierend auf Jons Idee:
InformationsquelleAutor der Antwort Trufa
basierend auf Jon's Idee und Liebe Trufa
ändert es alle Ihre alten Werte vorkommen
InformationsquelleAutor der Antwort Pooya
Können Sie nicht. Wenn Sie es ändern wollen, müssen Sie eine Liste verwenden, anstatt ein Tupel.
Beachten Sie, dass Sie könnten, statt ein neues Tupel, das hat den neuen Wert als erstes element.
InformationsquelleAutor der Antwort BrenBarn
Ich habe festgestellt, der beste Weg, um Bearbeiten-Tupeln besteht darin, die Tupel mit der vorherigen version als Basis.
Hier ist ein Beispiel, das ich verwendet für die Herstellung eine leichtere version einer Farbe (ich hatte es schon offen zu der Zeit):
Was es tut, ist es geht durch das Tupel 'Farbe' und liest jeden Artikel, macht etwas, um es, und schließlich fügt es den neuen Tupel.
Also, was Sie wollen, wäre so etwas wie:
Dass spezifische nicht funktioniert, aber das Konzept ist das, was Sie brauchen.
das ist das Konzept.
InformationsquelleAutor der Antwort Aedus
Frist, Fragen Sie sich, warum Sie möchten, mutieren Ihre
tuple
. Es gibt einen Grund, warum strings und Tupel sind unveränderlich in Ptyhonwenn Sie wollen, mutieren Ihretuple
dann sollte es wohl einlist
statt.Zweitens, wenn Sie immer noch wollen, mutieren Ihre Tupel, dann können Sie konvertieren Sie Ihre
tuple
zu einemlist
konvertieren Sie es dann zurück, und weisen Sie die neue Tupel in die gleiche variable. Dies ist die große wenn Sie nur gehen, zu mutieren Ihre Tupel einmal. Ansonsten, ich persönlich denke, das ist kontraintuitiv. Denn Es ist im wesentlichen die Schaffung einer neuen Tupel und jedes mal, wenn Sie wollen, mutieren die Tupel, die Sie haben würde, um die Konvertierung durchzuführen. Auch, Wenn Sie Lesen, der code wäre es verwirrend sein, zu denken, warum nicht erstellen Sie einfach einelist
? Aber es ist schön, weil es nicht erfordern keine Bibliothek.Schlage ich vor, mit
mutabletuple(typename, field_names, default=MtNoDefault)
aus mutabletuple 0.2. Ich persönlich denke, dass dieser Weg ein intuitiver und lesbar. Das persönliche Lesen der code würde wissen, dass der Schriftsteller beabsichtigt, mutieren diese Tupel in die Zukunft. Der Nachteil im Vergleich zu denlist
Umwandlung Methode, die oben ist, dass dies erfordert, dass Sie der import von weiteren py-Datei.TL;DR: versuchen Sie nicht, zu mutieren
tuple
. wenn Sie tun, und es ist ein einmaliger Vorgang konvertierentuple
Liste mutieren, wenden Sielist
in eine neuetuple
und weisen Sie zurück, um die variable halten altetuple
. Wenn Wünschetuple
und irgendwie vermeiden wollenlist
wollen und mutieren mehr als einmal, dann erstellenmutabletuple
.InformationsquelleAutor der Antwort OLIVER.KOO
Ich glaube, dass dies technisch wird die Frage beantwortet, aber nicht dieses zu Hause. Im moment, alle Antworten umfassen das erstellen einer neuen Tupel, sondern Sie können
ctypes
ändern eines Tupels in-memory. Unter Berufung auf verschiedene details der Implementierung der CPython auf einem 64-bit-system, ein Weg, dies zu tun ist wie folgt:InformationsquelleAutor der Antwort fuglede
habe ich dieses:
und zu ändern, tun Sie einfach
- und u ändern kann ein Tupel 😀
hier ist es genau kopiert aus dem Ruhezustand
InformationsquelleAutor der Antwort MC_Creep3r