在python中将list转换为tuple

Convert list to tuple in Python

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

当我用谷歌搜索它时,我发现很多答案类似于:

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

但如果我这样做,我会收到这个错误消息:

TypeError: 'tuple' object is not callable

我如何解决这个问题?


它应该工作得很好。不要使用tuplelist或其他特殊名称作为变量名。这可能是导致你问题的原因。

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

根据Eumiro的评论,通常tuple(l)会将列表l转换为元组:

1
2
3
4
5
6
7
In [1]: l = [4,5,6]

In [2]: tuple
Out[2]: <type 'tuple'>

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

但是,如果您将tuple重新定义为元组而不是typetuple

1
2
3
4
In [4]: tuple = tuple(l)

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

然后会得到一个类型错误,因为元组本身不可调用:

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

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

1
2
3
4
In [6]: del tuple

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


你可能做过类似的事情:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> 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)…所以,现在tupletuple类型的object现在…

它不再是一个type,因此也不再是Callable

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


要添加另一个tuple(l)选项,从python>=3.5开始,您可以执行以下操作:

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

短,有点快,但可能会受到可读性的影响。

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

P.S:您收到的错误是由于名称tuple被屏蔽,即您分配给名称tuple,例如tuple = (1, 2, 3)

del tuple你应该走得好。


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

在Python中,有无数种方法可以做到这一点,以下是一些实例正常方式

1
2
3
4
5
6
7
8
>>> l= [1,2,"stackoverflow","python"]
>>> l
[1, 2, 'stackoverflow', 'python']
>>> tup = tuple(l)
>>> type(tup)
<type 'tuple'>
>>> tup
(1, 2, 'stackoverflow', 'python')

聪明的方式

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

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