web-dev-qa-db-fra.com

Convertir la liste en tuple dans Python

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?

510
LynnH

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

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 typeTuple:

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'>
106
unutbu

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

27
Rohit Jain

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.

20

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.

6
TheExorcist