2011-02-06 14 views
45

Estoy trabajando en un script donde tengo una lista de tuplas como ('1','2','3','4'). ej .:cómo agregar valor a una tupla?

list = [('1','2','3','4'), 
     ('2','3','4','5'), 
     ('3','4','5','6'), 
     ('4','5','6','7')] 

Ahora tengo que añadir '1234', '2345', '3456' y '4567' respectivamente, al final de cada tupla. e.g:

list = [('1','2','3','4','1234'), 
     ('2','3','4','5','2345'), 
     ('3','4','5','6','3456'), 
     ('4','5','6','7','4567')] 

¿Es posible de alguna manera?

+7

cross-language solution? ;) – Snowbear

+2

¡Bienvenido a StackOverflow! A la derecha, cuando hacía su pregunta, estaba esta práctica caja ** Cómo formatear **. Merece la pena leerlo, ya que [la página está vinculada] (http://stackoverflow.com/editing-help) del ** [?] ** justo encima del área de preguntas. –

+0

que idioma? –

Respuesta

8

En Python, no puede. Las tuplas son inmutables.

En la lista que contiene, podría reemplazar la tupla ('1', '2', '3', '4') con una tupla diferente de ('1', '2', '3', '4', '1234').

12

Basado en la sintaxis, supongo que esto es Python. El punto de una tupla es que es inmutable, por lo que necesita para reemplazar cada elemento con una nueva tupla:

list = [l + (''.join(l),) for l in list] 
# output: 
[('1', '2', '3', '4', '1234'), 
('2', '3', '4', '5', '2345'), 
('3', '4', '5', '6', '3456'), 
('4', '5', '6', '7', '4567')] 
+4

Esto funciona, claro. Pero, ¿debería hacerse esto realmente? Me pregunto. Porque esto derrota el propósito de tener una tupla en primer lugar. ¿O estoy equivocado? – user225312

79

Las tuplas son inmutables y no se supone que ser cambiado - eso es lo que el tipo de lista es para. Puede reemplazar cada tupla por originalTuple + (newElement,), creando así una nueva tupla. Por ejemplo:

t = (1,2,3) 
t = t + (1,) 
print t 
(1,2,3,1) 

Pero prefiero sugiero ir con listas desde el principio, porque son más rápidos para la inserción de artículos.

Y otra sugerencia: No sobrescriba el nombre incorporado list en su programa, en lugar de llamar a la variable l o algún otro nombre. Si sobrescribe el nombre incorporado, ya no podrá usarlo en el alcance actual.

+14

Una abreviatura 't + = 1,' –

6

Como otras personas han respondido, las tuplas en python son inmutables y la única forma de "modificar" una es crear una nueva con los elementos adjuntos incluidos.

Pero la mejor solución es una lista. Cuando necesite llamarse a cualquier función o método que requiera una tupla, cree una tupla utilizando tupla (lista).

2
list_of_tuples = [('1', '2', '3', '4'), 
         ('2', '3', '4', '5'), 
         ('3', '4', '5', '6'), 
         ('4', '5', '6', '7')] 


    def mod_tuples(list_of_tuples): 
     for i in range(0, len(list_of_tuples)): 
      addition = '' 
      for x in list_of_tuples[i]: 
       addition = addition + x 
      list_of_tuples[i] = list_of_tuples[i] + (addition,) 
     return list_of_tuples 

    # check: 
    print mod_tuples(list_of_tuples) 
3

que iba a través de algunos detalles relacionados con tuple y list, y lo que entiende es:

  • las tuplas son Heterogeneous colección tipo de datos
  • Tuple tiene de longitud fija (según el tipo de tupla)
  • Tuple son Siempre finito

Así que para anexar nuevo elemento a una tupla, tienen que echarlo a list, y hacer append() operación en él, y de nuevo volver a echarlo tupla.

Pero personalmente lo que sentía acerca de la pregunta es, si Tuplas se supone que son finitos, fijos longitud artículos y si estamos usando los tipos de datos en nuestras lógicas de aplicación a continuación, debe haber no sea un escenario para agregar nuevos elementos O actualizar un valor de elemento en el mismo. Entonces, en lugar de lista de tuplas debe ser lista de la lista en sí, ¿Estoy en lo cierto?

Cuestiones relacionadas