2012-10-11 60 views
350

Estoy tratando de convertir una lista en una tupla.Convertir lista a tupla en Python

Cuando Google él, encuentro una gran cantidad de respuestas similares a:

l = [4,5,6] 
tuple(l) 

Pero si hago lo que me sale este mensaje de error:

TypeError: 'tuple' object is not callable

¿Cómo puedo solucionar este problema?

+51

¿Ha asignado el nombre de la variable 'tuple' en otro lugar antes? – eumiro

+8

No es demasiado exigente, pero probablemente tampoco use minúsculas "el" como nombre de variable debido a su parecido con 1. Lo mismo ocurre con el mayúscula "oh" debido a su parecido con cero. Incluso "li" es mucho más legible en comparación. –

Respuesta

521

Debería funcionar bien. No use tuple, list u otros nombres especiales como nombre de variable. Probablemente sea lo que está causando tu problema.

>>> l = [4,5,6] 
>>> tuple(l) 
(4, 5, 6) 
+0

¡Funciona como un encanto! – Linjie

86

Ampliando el comentario de eumiro, normalmente tuple(l) convertirá una lista l en una tupla:

In [1]: l = [4,5,6] 

In [2]: tuple 
Out[2]: <type 'tuple'> 

In [3]: tuple(l) 
Out[3]: (4, 5, 6) 

Sin embargo, si usted ha redefinido tuple a ser una tupla en lugar de la typetuple:

In [4]: tuple = tuple(l) 

In [5]: tuple 
Out[5]: (4, 5, 6) 

luego obtiene un TypeError ya que la tupla en sí no es invocable:

In [6]: tuple(l) 
TypeError: 'tuple' object is not callable 

Puede recuperar la definición original para tuple al dejar de fumar y reiniciar el intérprete, o (gracias a @glglgl):

In [6]: del tuple 

In [7]: tuple 
Out[7]: <type 'tuple'> 
+16

Debería poder recuperar con un simple 'del tuple'. – glglgl

+1

Gracias, @glglgl. No lo sabía, aunque en retrospectiva tiene sentido. – unutbu

+0

Gracias @glglgl volver a establecer mis tuplas hizo maravillas :-) Y gracias unutbu para publicar – Alvis

23

Es posible que haya hecho algo como esto:

>>> tuple = 45, 34 # You used `tuple` as a variable here 
>>> tuple 
(45, 34) 
>>> l = [4, 5, 6] 
>>> tuple(l) # Will try to invoke the variable `tuple` rather than tuple type. 

Traceback (most recent call last): 
    File "<pyshell#10>", line 1, in <module> 
    tuple(l) 
TypeError: 'tuple' object is not callable 
>>> 
>>> del tuple # You can delete the object tuple created earlier to make it work 
>>> tuple(l) 
(4, 5, 6) 

Aquí está el problema ... Dado que ha utilizado una variable tuple para contener un tuple (45, 34) anteriormente ... Por lo tanto, ahora tuple es un object del tipo tuple ahora ...

No es más un type y por lo tanto, no es más Callable.

Never utilice cualquier tipo incorporado como su nombre de variable ... Usted tiene cualquier otro nombre para usar. Usar cualquier nombre arbitrario para su variable en lugar ...

10
l = [4,5,6] 

para convertir a la lista de tuplas,

l = tuple(l) 
3

encuentro muchas respuestas hasta la fecha y debidamente contestadas, pero habrá añadir algo nuevo a la pila de respuestas .

En Python hay infinitas maneras de hacer esto, aquí son algunos casos
manera normal

>>> l= [1,2,"stackoverflow","pytho"] 
>>> l 
[1, 2, 'stackoverflow', 'pytho'] 
>>> tup = tuple(l) 
>>> type(tup) 
>>> tup = tuple(l) 
>>> type(tup) 
<type 'tuple'> 
>>> type(tup) 
<type 'tuple'> 
>>> tup 
(1, 2, 'stackoverflow', 'pytho') 

manera inteligente

>>>tuple(item for item in l) 
(1, 2, 'stackoverflow', 'pytho') 

Recuerde tupla es inmutable, que se utiliza para almacenar algo valioso. Por ejemplo, la contraseña, clave o hash se almacenan en tuplas o diccionarios. Si se necesita un cuchillo, ¿por qué usar una espada para cortar manzanas? Úselo sabiamente, también hará que su programa sea eficiente.

9

Para agregar otra alternativa a tuple(l), a partir de Python> = 3.5 que puede hacer:

t = *l, # or t = (*l,) 

corto, un poco más rápido pero probablemente sufre de legibilidad.

Esto esencialmente desempaqueta la lista l dentro de una tupla literal que se crea debido a la presencia de la coma simple ,.


P.s: El error que está recibiendo es debido al enmascaramiento del nombre tuple es decir que ha asignado al nombre tupla algún lugar por ejemplo tuple = (1, 2, 3).

Usando del tuple debería estar listo para empezar.

2

Esto es lo que estoy haciendo:

l = [4,5,6] 
tuplex = tuple(l) 
print(tuplex) 
Cuestiones relacionadas