在Python中将列表转换为元组

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

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

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

然而,当我运行该代码时,它会导致一个错误消息:

'tuple'对象不可调用

我该如何解决这个问题?

902837 次浏览

它应该可以正常工作。不要使用tuplelist或其他特殊名称作为变量名。这可能就是你的问题所在。

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


>>> tuple = 'whoops'   # Don't do this
>>> tuple(l)
TypeError: 'tuple' object is not callable

扩展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'>

你可能会这样做:

>>> 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)…因此,现在tupleobject类型tuple现在…

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

Never使用任何内置类型作为变量名…你还有别的名字可以用。可以使用任意的变量名称…

我发现许多答案是最新的,正确的回答,但会添加一些新的答案堆栈。

在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')
记住tuple是不可变的,用于存储有价值的东西。 例如,密码、密钥或哈希值存储在元组或字典中。 如果需要刀,为什么要用剑切苹果。 明智地使用它,它也会使你的程序高效。< / p >

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

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

短,更快,但可能会影响可读性。

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


注:你正在接收的错误是由于名称tuple的屏蔽,即你分配到名称元组的某个地方,如tuple = (1, 2, 3)

使用del tuple就可以了。

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
  1. 你是否将'tuple'作为变量名?

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

L = [1,2,3]

元组(L)

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

在比;(1,2,3)

你可以继续使用方括号访问元组中的任何项。 L[0] < / >强

1