Ajouter des variables au tuple


282

J'apprends Python et je crée une connexion à une base de données. Tout en essayant d'ajouter à la base de données, je pense à créer des tuples à partir d'informations puis à les ajouter à la base de données.

Ce que je fais : je prends des informations de l'utilisateur et je les stocke dans des variables. Puis-je ajouter ces variables dans un tuple? Pouvez-vous m'aider avec la syntaxe?

Aussi, s'il existe un moyen efficace de le faire, veuillez partager ...

EDIT Permettez-moi d'éditer un peu cette question ... J'ai seulement besoin du tuple pour entrer des informations dans la base de données. Une fois les informations ajoutées à la base de données, dois-je supprimer le tuple? Je veux dire que je n'ai plus besoin du tuple.

Réponses:


371

Les tuples sont immuables; vous ne pouvez pas changer les variables qu'ils contiennent après la construction. Cependant, vous pouvez les concaténer ou les découper pour former de nouveaux tuples:

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

Et, bien sûr, construisez-les à partir des valeurs existantes:

name = "Joe"
age = 40
location = "New York"
joe = (name, age, location)

J'ai seulement besoin de ces tuples pour les ajouter à la base de données après l'entrée de l'utilisateur. dois-je donc détruire ces tuples une fois la mise à jour de la base de données terminée?
Amit

5
Vous n'avez pas besoin de détruire les tuples après la mise à jour de la base de données. S'ils sortent du cadre, ils doivent être récupérés.
Justin Standard

Pour ajouter une chaîne au tuple sans casser la chaîne elle-même, consultez stackoverflow.com/a/16449189
Enzo Ferey

Ajouter simplement a = (), et b= a + (5), conduit à b = 5, par conséquent, b= a + (5,)conduirait à b = (5,); un tuple.
yashgarg1232

222

Vous pouvez commencer avec un tuple vierge avec quelque chose comme t = (). Vous pouvez ajouter avec +, mais vous devez ajouter un autre tuple. Si vous souhaitez ajouter un seul élément, faire un singleton: t = t + (element,). Vous pouvez ajouter un tuple de plusieurs éléments avec ou sans cette virgule de fin.

>>> 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)

20
Dans cet exemple, on peut aussi faire: t = ()alorst += (1,)
Douglas Denhartog

2
Quel avantage y a-t-il à inclure la virgule de fin?
Splic

13
La virgule de fin est nécessaire pour que le singleton évite la confusion entre un élément entre parenthèses. Les parenthèses simples sont utilisées dans l'ordre des opérations, donc (7) n'est que de 7. Mais (7,) est un tuple à un élément où l'élément est 7. De même, 3 * (7 + 8) = 45, mais 3 * ( 7 + 8,) = (15, 15, 15) - est-ce que cela a du sens?
Daniel

2
Quant aux tuples multi-éléments, la virgule de fin est 100% facultative. L'inclure signifie en quelque sorte «c'est un tuple, je sais que c'est un tuple, je sais comment fonctionnent les tuples et je sais que je peux le faire». Mais aucune virgule ne semble plus naturelle. Idk. Dépend de vous.
Daniel

Je pense qu'il est important de noter que les tuples sont immuables - ils ne peuvent pas réellement être modifiés. La solution consiste à créer un nouveau tuple basé sur deux tuples existants .
That1Guy

44

Une autre tactique non encore mentionnée consiste à ajouter à une liste, puis à convertir la liste en un tuple à la fin:

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

Retour

(0, 1, 2, 3, 4)

J'utilise parfois cela lorsque je dois passer un tuple comme argument de fonction, ce qui est souvent nécessaire pour les fonctions numpy.


3
Il est utile de savoir que l'inverse de cela, c'est à dire list(someTuple)fonctionne aussi. Les deux types d'objets sont apparemment interchangeables
khaverim

Pas vraiment interchangeable, je pense que la conversion de tuple en liste copiera tous les éléments de la liste, donc il y a certainement de la place pour l'éviter
gbtimmon

41

Dans Python 3, vous pouvez utiliser *pour créer un nouveau tuple d'éléments à partir du tuple d'origine avec le nouvel élément.

>>> tuple1 = ("foo", "bar")
>>> tuple2 = (*tuple1, "baz")
>>> tuple2
('foo', 'bar', 'baz')

2
C'est de loin le plus pythonique pour moi.
Bumsik Kim

6
C'est 10 fois plus lent que tuple1 + ("baz",).
Mateen Ulhaq

9

"une fois les informations ajoutées à la base de données, dois-je supprimer le tuple? Je veux dire que je n'ai plus besoin du tuple."

Non.

En règle générale, il n'y a aucune raison de supprimer quoi que ce soit. Il existe des cas particuliers à supprimer, mais ils sont très, très rares.

Définissez simplement une portée étroite (c'est-à-dire une définition de fonction ou une fonction de méthode dans une classe) et les objets seront récupérés à la fin de la portée.

Ne vous inquiétez pas de supprimer quoi que ce soit.

[Remarque. J'ai travaillé avec un gars qui - en plus d'essayer de supprimer des objets - écrivait toujours des méthodes de «réinitialisation» pour les effacer. Comme s'il allait les sauver et les réutiliser. Également une vanité stupide. Ignorez simplement les objets que vous n'utilisez plus. Si vous définissez vos fonctions dans des blocs de code suffisamment petits, vous n'avez plus rien à penser.]


7

C'est aussi simple que ce qui suit:

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")

Cependant, les tuples en Python sont immuables , vous ne pouvez donc pas ajouter de variables à un tuple une fois qu'il est créé.


3

Comme d'autres réponses l'ont noté, vous ne pouvez pas modifier un tuple existant, mais vous pouvez toujours créer un nouveau tuple (qui peut prendre certains ou tous les éléments des tuples existants et / ou d'autres sources).

Par exemple, si tous les éléments d'intérêt se trouvent dans des variables scalaires et que vous connaissez les noms de ces variables:

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

à utiliser, par exemple, comme dans cet exemple:

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

bien sûr, ce cas serait plus simplement exprimé par (x, y, z)(ou même en supprimant complètement les noms (23, 45, 67)), mais l' maketupleapproche pourrait être utile dans certains cas plus compliqués (par exemple, lorsque les noms à utiliser sont également déterminés de manière dynamique et ajoutés à une liste pendant la calcul).


2

Je suis presque sûr que la syntaxe pour cela en python est:

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

une fois définis, les tuples ne peuvent pas être modifiés.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.