在Python中将列表转换为元组

我试图将列表转换为元组。

当我谷歌,我发现很多类似的答案:

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

但是,如果我这样做,我得到这个错误消息:

TypeError:“元组”对象不可调用

我该如何解决这个问题?

它应该工作正常。 不要使用tuplelist或其他特殊名称作为variables名称。 这可能是什么导致你的问题。

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

通过扩展eumiro的评论,通常tuple(l)会将列表l转换成一个元组:

 In [1]: l = [4,5,6] In [2]: tuple Out[2]: <type 'tuple'> In [3]: tuple(l) Out[3]: (4, 5, 6) 

但是,如果您已经将tuple重新定义为tuple组而不是type tuple

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

那么你得到一个TypeError,因为元组本身是不可调用的:

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

您可以通过退出并重新启动解释器来恢复tuple的原始定义,或者(感谢@glglgl):

 In [6]: del tuple In [7]: tuple Out[7]: <type 'tuple'> 

你可能做了这样的事情:

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

这是问题…因为你已经使用了一个tuplevariables来保存一个tuple (45, 34) …所以,现在tuple是一个tupletypes的object现在…

它不再是一种type ,因此,它不再是Callable

Never使用任何内置types作为您的variables名称…您可以使用任何其他名称。 使用任何你的variables的任意名称,而不是…

 l = [4,5,6] 

将列表转换为元组,

 l = tuple(l) 

我发现很多答案是最新的,并且得到了很好的回答,但是会给答案增加新的东西。

在Python中有无数​​的方法来做到这一点,这里有一些例子
正常的方式

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

聪明的方式

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

记住元组是不可变的,用于存储有价值的东西。 例如密码,密钥或哈希存储在元组或字典中。 如果刀需要用刀切苹果。 明智地使用它,也会使你的程序高效。

为了添加另一个tuple(l)替代,从Python> = 3.5你可以这样做:

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

总之,速度有点快,但可能会受到可读性的限制。

这基本上解开了由于单个逗号的存在而创build的元组文本中的列表l


Ps:你收到的错误是由于掩盖了名字tuple就是你在某个地方分配了名字元组,例如tuple = (1, 2, 3)

使用del tuple你应该很好走。

这就是我所做的:

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