问题:在Python中将列表转换为元组
我正在尝试将列表转换为元组。
Google上的大多数解决方案都提供以下代码:
l = [4,5,6]
tuple(l)
但是,运行该代码会导致错误消息:
TypeError:“元组”对象不可调用如何解决此问题?
回答 0
它应该工作正常。不要使用tuple
,list
或其他特殊的名字作为变量名。这可能是导致您出现问题的原因。
>>> l = [4,5,6]
>>> tuple(l)
(4, 5, 6)
回答 1
扩展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'>
回答 2
您可能已经做过这样的事情:
>>> 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
…
它不再是一个type
,因此不再Callable
。
Never
使用任何内置类型作为变量名…您确实可以使用任何其他名称。请为变量使用任意名称…
回答 3
tuple(l)
自Python> =起,要向中添加其他替代方法,3.5
您可以执行以下操作:
t = *l, # or t = (*l,)
简短一点快,但可能是从可读性受到影响。
这实际上将列表解压缩到l
元组文字中,该元组文字是由于单个逗号的存在而创建的,
。
Ps:您收到的错误是由于名称的掩盖所致,tuple
即您在某处(例如)分配了名称元组tuple = (1, 2, 3)
。
使用del tuple
您应该很好。
回答 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')
请记住,元组是不变的,用于存储有价值的东西。例如,密码,密钥或哈希存储在元组或字典中。如果需要刀,为什么要用剑切苹果。明智地使用它,还可以使您的程序高效。