2010-02-22 6 views
31

Sí, entiendo que las tuplas son inmutables pero la situación es tal que necesito insertar un valor extra en cada tupla. Así que uno de los elementos es la cantidad, tengo que añadir un nuevo elemento a su lado en una moneda diferente, así:Insertar un elemento en un Tuple

('Product', '500.00', '1200.00') 

Posible?

Gracias!

+3

Bienvenido a la programación funcional. No está 'actualizando' una tupla, está creando una nueva tupla de una antigua tupla. Use 'collections.namedtuple' y será obvio que está creando un nuevo tipo de objeto a partir de un tipo antiguo de objeto. –

Respuesta

43

Puede convertirlo en una lista, insertar el elemento y luego convertirlo a una tupla.

a = ('Product', '500.00', '1200.00') 
a = list(a) 
a.insert(3, 'foobar') 
a = tuple(a) 
print a 

>> ('Product', '500.00', '1200.00', 'foobar') 
+10

O cualquiera de una serie de enfoques que no modifican la tupla original, sino que la reemplazan. – Steve314

+2

Esto realmente no es una buena solución. Puedes usar '+ = ('foobar',)' para el mismo efecto. – gbtimmon

40

Dado que las tuplas son inmutables, esto dará como resultado una nueva tupla. Solo colócalo donde obtuviste el anterior.

sometuple + (someitem,) 
3

una forma es para convertirlo en una lista

>>> b=list(mytuple) 
>>> b.append("something") 
>>> a=tuple(b) 
18

Es absolutamente necesario hacer una nueva tupla - entonces usted puede volver a vincular el nombre (o lo que sea la referencia [s]) de la vieja tupla a la nueva. El operador puede ayudar += (si sólo había una referencia a la antigua tupla), ej .:

thetup += ('1200.00',) 

hace la Anexión y reconsolidación de un solo golpe.

+0

sí, como aprendí de la manera difícil: P + = no intenta modificar la referencia en su lugar, reasigna –

+0

@Matt, exactamente - pero con una tupla o cadena, eso es todo lo que puede hacer (si lo aplica a una lista, _hace_ modificarla en el lugar - la parte "reasignar" es una sobrecarga insignificante), –

+0

Siempre me pone los pelos de punta. + = en mi opinión debería ser una modificación en el lugar. Si no puede hacerlo, no parezca estar haciéndolo. Sin embargo, no soy el experto en Python, y claramente cualquiera que sea mi opinión, hace lo que está definido para hacer. Y de todos modos, no es una queja objetivamente sensata: los enteros son mutables y puede + = hacerlo lo suficientemente fácil, lo que de nuevo significa reemplazo.Básicamente intuición-choque entre modelos de lenguaje. – Steve314

7

Para el caso en que no va a agregar al final de la tupla

>>> a=(1,2,3,5,6) 
>>> a=a[:3]+(4,)+a[3:] 
>>> a 
(1, 2, 3, 4, 5, 6) 
>>> 
12
def tuple_insert(tup,pos,ele): 
    tup = tup[:pos]+(ele,)+tup[pos:] 
    return tup 

tuple_insert(tup,pos,9999) 

TUP: tupla
pos: Posición para insertar
ele: Elemento para insertar

2

También puede codificar así:

T += (new_element,) 
3

t = (1,2,3,4,5)

t = t + (6,7)

salida:

(1,2,3,4,5 , 6,7)

Cuestiones relacionadas