Variablen zum Tupel hinzufügen

282

Ich lerne Python und erstelle eine Datenbankverbindung. Beim Versuch, der Datenbank etwas hinzuzufügen, denke ich daran, Tupel aus Informationen zu erstellen und sie dann der Datenbank hinzuzufügen.

Was ich tue : Ich nehme Informationen vom Benutzer und speichere sie in Variablen. Kann ich diese Variablen zu einem Tupel hinzufügen? Können Sie mir bitte bei der Syntax helfen?

Auch wenn es einen effizienten Weg gibt, teilen Sie bitte ...

BEARBEITEN Lassen Sie mich diese Frage ein wenig bearbeiten ... Ich brauche nur das Tupel, um Informationen in die Datenbank einzugeben. Soll ich das Tupel löschen, sobald die Informationen zur Datenbank hinzugefügt wurden? Ich meine, ich brauche das Tupel nicht mehr.

amit
quelle

Antworten:

370

Tupel sind unveränderlich; Sie können nicht ändern, welche Variablen sie nach der Erstellung enthalten. Sie können sie jedoch verketten oder in Scheiben schneiden, um neue Tupel zu bilden:

a = (1, 2, 3)
b = a + (4, 5, 6)  # (1, 2, 3, 4, 5, 6)
c = b[1:]  # (2, 3, 4, 5, 6)

Und bauen Sie sie natürlich aus vorhandenen Werten auf:

name = "Joe"
age = 40
location = "New York"
joe = (name, age, location)
John Millikin
quelle
Ich brauche diese Tupel nur zum Hinzufügen zur Datenbank nach Benutzereingaben. Soll ich diese Tupel zerstören, nachdem die Aktualisierung der Datenbank abgeschlossen ist?
Amit
5
Sie müssen die Tupel nach dem Aktualisieren der Datenbank nicht zerstören. Wenn sie nicht mehr in den Geltungsbereich fallen, sollten sie mit Müll gesammelt werden.
Justin Standard
Um dem Tupel einen String hinzuzufügen, ohne den String selbst zu brechen, überprüfen Sie stackoverflow.com/a/16449189
Enzo Ferey
Nur zu addieren a = ()und b= a + (5)führt zu b = 5 b= a + (5,), würde daher zu führen b = (5,); ein Tupel.
Yashgarg1232
221

Sie können mit einem leeren Tupel mit so etwas wie beginnen t = (). Sie können mit hinzufügen +, aber Sie müssen ein weiteres Tupel hinzufügen. Wenn Sie ein einzelnes Element hinzufügen möchten, machen Sie es zu einem Singleton : t = t + (element,). Sie können ein Tupel mehrerer Elemente mit oder ohne dieses nachfolgende Komma hinzufügen.

>>> t = ()
>>> t = t + (1,)
>>> t
(1,)
>>> t = t + (2,)
>>> t
(1, 2)
>>> t = t + (3, 4, 5)
>>> t
(1, 2, 3, 4, 5)
>>> t = t + (6, 7, 8,)
>>> t
(1, 2, 3, 4, 5, 6, 7, 8)
Daniel
quelle
20
In diesem Beispielfall kann man auch tun: t = ()dannt += (1,)
Douglas Denhartog
2
Welchen Vorteil hat das Einfügen des nachgestellten Kommas?
Splic
13
Das nachfolgende Komma ist erforderlich, damit der Singleton Verwechslungen zwischen einem Element in Klammern vermeidet. Einfache Klammern werden in der Reihenfolge der Operationen verwendet, daher ist (7) nur 7. Aber (7,) ist ein Ein-Element-Tupel, bei dem das Element 7 ist. Ebenso ist 3 * (7 + 8) = 45, aber 3 * ( 7 + 8,) = (15, 15, 15) - macht das Sinn?
Daniel
2
Bei den Tupeln mit mehreren Elementen ist das nachfolgende Komma zu 100% optional. Das Einbeziehen bedeutet "das ist ein Tupel, ich weiß, es ist ein Tupel, ich weiß, wie Tupel funktionieren, und ich weiß, dass ich das kann." Aber kein Komma scheint natürlicher zu sein. Idk. Wie du willst.
Daniel
Ich denke, es ist wichtig zu beachten, dass Tupel unveränderlich sind - sie können nicht wirklich geändert werden. Mit dieser Lösung wird ein neues Tupel erstellt, das auf zwei vorhandenen Tupeln basiert .
That1Guy
44

Eine andere Taktik, die noch nicht erwähnt wurde, besteht darin, an eine Liste anzuhängen und die Liste am Ende in ein Tupel umzuwandeln:

mylist = []
for x in range(5):
    mylist.append(x)
mytuple = tuple(mylist)
print mytuple

kehrt zurück

(0, 1, 2, 3, 4)

Ich benutze dies manchmal, wenn ich ein Tupel als Funktionsargument übergeben muss, was oft für die Numpy-Funktionen notwendig ist.

ehontz
quelle
3
Es ist nützlich zu wissen, dass das Gegenteil davon list(someTuple)funktioniert , dh auch funktioniert. Die beiden Objekttypen sind anscheinend austauschbar
khaverim
Nicht wirklich austauschbar, ich denke, die Konvertierung von Tupel zu Liste wird alle Elemente in der Liste kopieren, also gibt es definitiv einen Ort, um dies zu vermeiden
gbtimmon
41

In Python 3 können Sie *ein neues Tupel von Elementen aus dem ursprünglichen Tupel zusammen mit dem neuen Element erstellen.

>>> tuple1 = ("foo", "bar")
>>> tuple2 = (*tuple1, "baz")
>>> tuple2
('foo', 'bar', 'baz')
Yang Bo
quelle
2
Dies ist bei weitem die pythonischste für mich.
Bumsik Kim
6
Dies ist 10x langsamer als tuple1 + ("baz",).
Mateen Ulhaq
9

"Sobald die Informationen zur Datenbank hinzugefügt wurden, sollte ich das Tupel löschen? Ich meine, ich brauche das Tupel nicht mehr."

Nein.

Im Allgemeinen gibt es keinen Grund, etwas zu löschen. Es gibt einige Sonderfälle zum Löschen, aber sie sind sehr, sehr selten.

Definieren Sie einfach einen engen Bereich (dh eine Funktionsdefinition oder eine Methodenfunktion in einer Klasse), und die Objekte werden am Ende des Bereichs mit Müll gesammelt.

Mach dir keine Sorgen, etwas zu löschen.

[Hinweis. Ich habe mit einem Mann zusammengearbeitet, der - zusätzlich zum Versuch, Objekte zu löschen - immer "Reset" -Methoden schrieb, um sie zu löschen. Als würde er sie retten und wiederverwenden. Auch eine dumme Einbildung. Ignorieren Sie einfach die Objekte, die Sie nicht mehr verwenden. Wenn Sie Ihre Funktionen in ausreichend kleinen Codeblöcken definieren, müssen Sie nicht mehr darüber nachdenken.]

S.Lott
quelle
7

Es ist so einfach wie das Folgende:

info_1 = "one piece of info"
info_2 = "another piece"
vars = (info_1, info_2)
# 'vars' is now a tuple with the values ("info_1", "info_2")

Tupel in Python sind jedoch unveränderlich , sodass Sie nach dem Erstellen keine Variablen mehr an ein Tupel anhängen können.

Mipadi
quelle
3

Wie andere Antworten bereits erwähnt haben, können Sie ein vorhandenes Tupel nicht ändern, aber Sie können jederzeit ein neues Tupel erstellen (das möglicherweise einige oder alle Elemente aus vorhandenen Tupeln und / oder anderen Quellen übernimmt).

Wenn sich beispielsweise alle interessierenden Elemente in skalaren Variablen befinden und Sie die Namen dieser Variablen kennen:

def maketuple(variables, names):
  return tuple(variables[n] for n in names)

zu verwenden, zB wie in diesem Beispiel:

def example():
  x = 23
  y = 45
  z = 67
  return maketuple(vars(), 'x y z'.split())

Natürlich würde dieser eine Fall einfacher ausgedrückt werden als (x, y, z)(oder sogar ganz auf die Namen verzichten (23, 45, 67)), aber der maketupleAnsatz könnte in einigen komplizierteren Fällen nützlich sein (z. B. wenn die zu verwendenden Namen auch dynamisch bestimmt und während des Zeitraums an eine Liste angehängt werden) Berechnung).

Alex Martelli
quelle
2

Ich bin mir ziemlich sicher, dass die Syntax dafür in Python lautet:

user_input1 = raw_input("Enter Name: ")
user_input2 = raw_input("Enter Value: ")
info = (user_input1, user_input2)

Einmal eingestellt, können Tupel nicht mehr geändert werden.

Jon W.
quelle