我试图将一个列表转换为元组。
谷歌上的大多数解决方案提供以下代码:
l = [4,5,6]
tuple(l)
然而,当我运行该代码时,它会导致一个错误消息:
'tuple'对象不可调用
我该如何解决这个问题?
我试图将一个列表转换为元组。
谷歌上的大多数解决方案提供以下代码:
l = [4,5,6]
tuple(l)
然而,当我运行该代码时,它会导致一个错误消息:
'tuple'对象不可调用
我该如何解决这个问题?
当前回答
要为tuple(l)添加另一个替代选项,从Python >= 3.5开始,您可以这样做:
t = *l, # or t = (*l,)
简短,稍快,但可能可读性较差。
这本质上是将列表l解包在一个元组文字中,这个元组文字是由于单个逗号的存在而创建的。
注:您正在接收的错误是由于名称元组的屏蔽,即您分配到名称元组的某个地方,例如tuple =(1,2,3)。
使用del tuple就可以了。
其他回答
我发现许多答案是最新的,正确的回答,但会添加一些新的答案堆栈。
在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是不可变的,用于存储有价值的东西。 例如,密码、密钥或哈希值存储在元组或字典中。 如果需要刀,为什么要用剑切苹果。 明智地使用它,它也会使你的程序高效。
它应该可以正常工作。不要使用元组、列表或其他特殊名称作为变量名。这可能就是你的问题所在。
>>> l = [4,5,6]
>>> tuple(l)
(4, 5, 6)
>>> tuple = 'whoops' # Don't do this
>>> tuple(l)
TypeError: 'tuple' object is not callable
要为tuple(l)添加另一个替代选项,从Python >= 3.5开始,您可以这样做:
t = *l, # or t = (*l,)
简短,稍快,但可能可读性较差。
这本质上是将列表l解包在一个元组文字中,这个元组文字是由于单个逗号的存在而创建的。
注:您正在接收的错误是由于名称元组的屏蔽,即您分配到名称元组的某个地方,例如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
扩展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而不是类型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'>