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.

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)

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)

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.


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

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.]


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.


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


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.