636

我正在尝试将列表转换为元组。

Google 上的大多数解决方案都提供以下代码:

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

但是,当我运行该代码时,它会导致一条错误消息:

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

我该如何解决这个问题?

4

7 回答 7

939

它应该可以正常工作。不要使用tuple,list或其他特殊名称作为变量名。这可能是导致您的问题的原因。

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

>>> tuple = 'whoops'   # Don't do this
>>> tuple(l)
TypeError: 'tuple' object is not callable
于 2012-10-11T09:15:17.950 回答
117

扩展 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为元组而不是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'>
于 2012-10-11T09:17:16.217 回答
33

要添加另一种替代方法tuple(l),从 Python >=开始3.5,您可以执行以下操作:

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

简而言之,速度更快,但可能会受到可读性的影响。

这实际上将列表解压缩l在一个元组文字中,该文字是由于单个逗号的存在而创建的,


Ps:您收到的错误是由于屏蔽了名称,tuple即您分配给某处的名称元组,例如tuple = (1, 2, 3)

使用del tuple你应该很好。

于 2017-06-22T09:30:41.277 回答
30

你可能做过这样的事情:

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

这就是问题所在...由于您使用tuple变量来保存tuple (45, 34)较早的...所以,现在tuple是现在object的类型tuple...

它不再是 a type,因此不再是Callable

Never使用任何内置类型作为变量名...您确实可以使用任何其他名称。改为为您的变量使用任意名称...

于 2012-10-11T09:17:25.767 回答
4

我找到了许多最新的答案并得到了正确的回答,但会在一堆答案中添加一些新的东西。

在python中有无数​​种方法可以做到这一点,这里有一些实例
正常方式

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

聪明的方式

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

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

于 2016-12-28T09:00:50.847 回答
0
  1. 您是否将名称“元组”指定为变量名?它应该可以正常工作。

L 是一个列表,我们想将它转换为一个元组。

L = [1, 2, 3]

元组(L)

通过调用元组,您将列表 (L) 转换为元组。如上所述。

>> (1, 2, 3)

您可以继续使用方括号访问元组中的任何项目。 L[0]

1

于 2022-01-01T05:23:33.980 回答
-2
l1 = []   #Empty list is given

l1 = tuple(l1)   #Through the type casting method we can convert list into tuple

print(type(l1))   #Now this show class of tuple
于 2020-07-02T14:49:04.657 回答