Agregar variables a la tupla

282

Estoy aprendiendo Python y creando una conexión de base de datos. Al intentar agregar a la base de datos, estoy pensando en crear tuplas a partir de información y luego agregarlas a la base de datos.

Lo que estoy haciendo : estoy tomando información del usuario y la almaceno en variables. ¿Puedo agregar estas variables a una tupla? ¿Me pueden ayudar con la sintaxis?

Además, si hay una manera eficiente de hacerlo, comparta ...

EDITAR Permítanme editar esta pregunta un poco ... Solo necesito la tupla para ingresar información en la base de datos. Una vez que la información se agrega a la base de datos, ¿debo eliminar la tupla? Quiero decir que ya no necesito la tupla.

amit
fuente

Respuestas:

371

Las tuplas son inmutables; no puede cambiar qué variables contienen después de la construcción. Sin embargo, puede concatenarlos o cortarlos para formar nuevas tuplas:

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

Y, por supuesto, construirlos a partir de valores existentes:

name = "Joe"
age = 40
location = "New York"
joe = (name, age, location)
John Millikin
fuente
Solo necesito estas tuplas para agregar a la base de datos después de la entrada del usuario. Entonces, ¿debo destruir estas tuplas después de que se complete la actualización a la base de datos?
amit
55
No necesita destruir las tuplas después de actualizar la base de datos. Si se salen del alcance, deben recolectarse basura.
Justin Standard
Para agregar una cadena a la tupla sin romper la cadena, consulte stackoverflow.com/a/16449189
Enzo Ferey
Solo agregar,, a = ()y b= a + (5), lleva a b = 5, por lo tanto b= a + (5,), llevaría a b = (5,); una tupla
yashgarg1232
222

Puede comenzar con una tupla en blanco con algo como t = (). Puede agregar con +, pero debe agregar otra tupla. Si desea agregar un solo elemento, lo convierten en un producto único: t = t + (element,). Puede agregar una tupla de múltiples elementos con o sin esa coma final.

>>> 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
fuente
20
En este caso de ejemplo, también se puede hacer: t = ()luegot += (1,)
Douglas Denhartog
2
¿Qué beneficio hay al incluir la coma final?
Splic
13
La coma final es necesaria para que el singleton evite la confusión entre un elemento entre paréntesis. Los paréntesis simples se usan en orden de operaciones, por lo que (7) es solo 7. Pero (7,) es una tupla de un elemento donde el elemento es 7. Del mismo modo, 3 * (7 + 8) = 45, pero 3 * ( 7 + 8,) = (15, 15, 15): ¿tiene sentido?
Daniel
2
En cuanto a las tuplas de elementos múltiples, la coma final es 100% opcional. Incluirlo significa "esto es una tupla, sé que es una tupla, sé cómo funcionan las tuplas y sé que puedo hacer eso". Pero ninguna coma puede parecer más natural. No sé. Depende de usted.
Daniel
Creo que es importante tener en cuenta que las tuplas son inmutables, en realidad no se pueden modificar. Lo que hace esta solución es crear una nueva tupla basada en dos tuplas existentes .
That1Guy
44

Otra táctica que aún no se menciona es utilizar agregar a una lista y luego convertir la lista en una tupla al final:

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

devoluciones

(0, 1, 2, 3, 4)

A veces uso esto cuando tengo que pasar una tupla como argumento de función, que a menudo es necesario para las funciones numpy.

ehontz
fuente
3
Es útil saber que lo contrario de esto, es decir, list(someTuple)también funciona. Los dos tipos de objetos son aparentemente intercambiables
Khaverim
En realidad, no intercambiables, creo que la conversión de la tupla a la lista de copiará todos los elementos de la lista, por lo que definitivamente hay lugar para evitarlo
gbtimmon
41

En Python 3, puede usar *para crear una nueva tupla de elementos a partir de la tupla original junto con el nuevo elemento.

>>> tuple1 = ("foo", "bar")
>>> tuple2 = (*tuple1, "baz")
>>> tuple2
('foo', 'bar', 'baz')
Yang Bo
fuente
2
Este es, con mucho, el más pitónico para mí.
Bumsik Kim
66
Esto es 10 veces más lento que tuple1 + ("baz",).
Mateen Ulhaq
9

"una vez que la información se agrega a la base de datos, ¿debo eliminar la tupla? Quiero decir que ya no la necesito".

No.

En general, no hay razón para eliminar nada. Hay algunos casos especiales para eliminar, pero son muy, muy raros.

Simplemente defina un alcance estrecho (es decir, una definición de función o una función de método en una clase) y los objetos se recogerán como basura al final del alcance.

No te preocupes por eliminar nada.

[Nota. Trabajé con un tipo que, además de tratar de eliminar objetos, siempre escribía métodos de "restablecimiento" para eliminarlos. Como si fuera a salvarlos y reutilizarlos. También una vanidad tonta. Simplemente ignora los objetos que ya no estás usando. Si define sus funciones en bloques de código lo suficientemente pequeños, no tiene nada más en qué pensar.]

S.Lott
fuente
7

Es tan fácil como lo siguiente:

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

Sin embargo, las tuplas en Python son inmutables , por lo que no puede agregar variables a una tupla una vez que se crea.

mipadi
fuente
3

Como han señalado otras respuestas, no puede cambiar una tupla existente, pero siempre puede crear una nueva tupla (que puede tomar algunos o todos los elementos de las tuplas existentes u otras fuentes).

Por ejemplo, si todos los elementos de interés están en variables escalares y conoce los nombres de esas variables:

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

para ser utilizado, por ejemplo, como en este ejemplo:

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

por supuesto, este caso se expresaría más simplemente como (x, y, z)(o incluso renunciando a los nombres por completo (23, 45, 67)), pero el maketupleenfoque podría ser útil en algunos casos más complicados (por ejemplo, donde los nombres a usar también se determinan dinámicamente y se agregan a una lista durante el cálculo).

Alex Martelli
fuente
2

Estoy bastante seguro de que la sintaxis para esto en Python es:

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

una vez establecidas, las tuplas no se pueden cambiar.

Jon W
fuente