2012-10-11 16 views
350

Sto provando a convertire una lista in una tupla.Converti lista in tupla in Python

Quando ho google, ho trovato un sacco di risposte simili a:

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

Ma se faccio che ottengo questo messaggio di errore:

TypeError: 'tuple' object is not callable

Come posso risolvere questo problema?

+51

Hai assegnato il nome della variabile 'tuple' altrove prima? – eumiro

+8

Non essere eccessivamente schizzinoso, ma probabilmente non dovresti usare la minuscola "el" come nome di variabile a causa della sua somiglianza con 1. Lo stesso vale per il capitale "oh" a causa della sua somiglianza a zero. Anche "li" è molto più leggibile in confronto. –

risposta

521

Dovrebbe funzionare correttamente. Non utilizzare tuple, list o altri nomi speciali come nome di variabile. Probabilmente è ciò che sta causando il tuo problema.

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

Funziona come un fascino! – Linjie

86

Ampliando commento di eumiro, normalmente tuple(l) sarà convertire un elenco l in una tupla:

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

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

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

Tuttavia, se si è ridefinito tuple di essere una tupla piuttosto che il typetuple:

In [4]: tuple = tuple(l) 

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

quindi si ottiene un errore TypeE poiché la stessa tupla non è chiamabile:

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

è possibile recuperare la definizione originale per tuple da chiudere e riavviare il vostro interprete, o (grazie a @glglgl):

In [6]: del tuple 

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

Dovresti riuscire a recuperare con una semplice 'del tuple'. – glglgl

+1

Grazie, @glglgl. Non lo sapevo, anche se a ben vedere ha senso. – unutbu

+0

Grazie @glglgl re-setting le mie tuple hanno fatto meraviglie :-) E grazie unutbu per la pubblicazione – Alvis

23

Si potrebbe avere fatto qualcosa di simile:

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

Ecco il problema ... Poiché è stata utilizzata una variabile tuple per contenere uno tuple (45, 34) in precedenza ... Quindi, ora tuple è un object di tipo tuple ora ...

Non è più un type e, quindi, non è più Callable.

Never utilizza qualsiasi tipo predefinito come nome della variabile ... Hai un altro nome da utilizzare. Utilizzare qualsiasi nome arbitrario per la variabile invece ...

10
l = [4,5,6] 

per convertire la lista di tuple,

l = tuple(l) 
3

trovo molte risposte aggiornate e correttamente risposto, ma sarà aggiungere qualcosa di nuovo alla pila di risposte .

In Python ci sono infiniti modi per fare questo, qui sono alcuni casi
modo normale

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

modo intelligente

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

Ricordati di tuple è immutabile, utilizzato per memorizzare qualcosa prezioso. Ad esempio, password, chiave o hash sono memorizzati in tuple o dizionari. Se il coltello è necessario perché usare la spada per tagliare le mele. Usalo saggiamente, renderà anche il tuo programma efficiente.

9

Per aggiungere un'altra alternativa al tuple(l), come di Python> = 3.5 si può fare:

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

Insomma, un po ' più veloce, ma probabilmente soffre di leggibilità.

Questo sostanzialmente decomprime l'elenco l all'interno di una tupla letterale che viene creata a causa della presenza della singola virgola ,.


P.S: L'errore che si riceve è dovuto al mascheramento del nome tuple cioè che è stato assegnato al nome tupla da qualche parte per es tuple = (1, 2, 3).

Utilizzando del tuple si dovrebbe essere a posto.

2

Questo è quello che sto facendo:

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