J'essaie de convertir une liste en un tuple.
Lorsque je le recherche sur Google, je trouve beaucoup de réponses similaires à:
l = [4,5,6]
Tuple(l)
Mais si je le fais, je reçois ce message d'erreur:
TypeError: l'objet 'Tuple' n'est pas appelable
Comment puis-je résoudre ce problème?
Cela devrait bien fonctionner. N'utilisez pas Tuple
, list
ou d'autres noms spéciaux comme nom de variable. C'est probablement ce qui cause votre problème.
>>> l = [4,5,6]
>>> Tuple(l)
(4, 5, 6)
En développant le commentaire de eumiro, normalement, Tuple(l)
convertira une liste l
en un tuple:
In [1]: l = [4,5,6]
In [2]: Tuple
Out[2]: <type 'Tuple'>
In [3]: Tuple(l)
Out[3]: (4, 5, 6)
Cependant, si vous avez redéfini Tuple
pour qu'il soit un tuple plutôt que le type
Tuple
:
In [4]: Tuple = Tuple(l)
In [5]: Tuple
Out[5]: (4, 5, 6)
alors vous obtenez un TypeError puisque le tuple lui-même n'est pas appelable:
In [6]: Tuple(l)
TypeError: 'Tuple' object is not callable
Vous pouvez récupérer la définition d'origine de Tuple
en quittant et en redémarrant votre interprète, ou (grâce à @glglgl):
In [6]: del Tuple
In [7]: Tuple
Out[7]: <type 'Tuple'>
Vous pourriez avoir fait quelque chose comme ça:
>>> 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)
Voici le problème ... Puisque vous avez utilisé une variable Tuple
pour contenir un Tuple (45, 34)
plus tôt ... Donc, maintenant Tuple
est un object
de type Tuple
maintenant...
Ce n'est plus une type
et par conséquent, ce n'est plus Callable
.
Never
utilisez n'importe quel type intégré comme nom de variable ... Vous n'avez pas d'autre nom à utiliser. Utilisez un nom quelconque pour votre variable à la place ...
Pour ajouter une autre alternative à Tuple(l)
, à partir de Python> = 3.5
, vous pouvez effectuer les opérations suivantes:
t = *l, # or t = (*l,)
bref, un bit plus rapide mais souffre probablement de lisibilité.
Cela décompresse essentiellement la liste l
à l'intérieur d'un littéral de tuple créé en raison de la présence de la virgule unique ,
.
P.s: L'erreur que vous recevez est due au masquage du nom Tuple
c'est-à-dire que vous avez attribué le nom Tuple quelque part, par exemple Tuple = (1, 2, 3)
.
En utilisant del Tuple
, vous devriez être prêt à partir.
Je trouve beaucoup de réponses à jour et correctement répondues mais j'ajouterai quelque chose de nouveau pour empiler les réponses.
Dans python il y a une infinité de façons de le faire, en voici quelques exemples
Manière normale
>>> l= [1,2,"stackoverflow","python"]
>>> l
[1, 2, 'stackoverflow', 'python']
>>> tup = Tuple(l)
>>> type(tup)
<type 'Tuple'>
>>> tup
(1, 2, 'stackoverflow', 'python')
façon intelligente
>>>Tuple(item for item in l)
(1, 2, 'stackoverflow', 'python')
Rappelez-vous que Tuple est immuable, utilisé pour stocker quelque chose de précieux. Par exemple, mot de passe, clé ou hachages sont stockés dans des tuples ou des dictionnaires. Si un couteau est nécessaire, pourquoi utiliser une épée pour couper les pommes. Utilisez-le judicieusement, cela rendra également votre programme efficace.