Преобразовать список в кортеж в Python

Я пытаюсь преобразовать список в кортеж.

Когда я google, я нахожу ответы, похожие на:

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

Но если я сделаю это, я получу это сообщение об ошибке:

TypeError: объект 'tuple' не может быть вызван

Как я могу исправить эту проблему?

Ответ 1

Он должен работать нормально. Не используйте tuple, list или другие специальные имена в качестве имени переменной. Вероятно, это является причиной вашей проблемы.

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

Ответ 2

Развернув комментарий 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'>

Ответ 3

Возможно, вы сделали что-то вроде этого:

>>> 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 используйте любые встроенные типы в качестве имени переменной... У вас есть другое имя для использования. Вместо этого используйте любое произвольное имя для вашей переменной...

Ответ 4

l = [4,5,6]

для преобразования списка в кортеж,

l = tuple(l)

Ответ 5

Я нахожу много ответов в актуальном состоянии и правильно ответил, но добавлю что-то новое в стек ответов.

В python есть бесконечные способы сделать это, вот несколько примеров Обычный способ

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

умный способ

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

Помните, что кортеж является неизменным, используется для хранения чего-то ценного. Например, пароль, ключ или хеши хранятся в кортежах или словарях. Если нужен нож, зачем использовать меч для резки яблок. Используйте его с умом, также сделайте свою программу эффективной.

Ответ 6

Чтобы добавить еще одну альтернативу tuple(l), с Python >= 3.5 вы можете сделать:

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

короткий, немного быстрее, но, вероятно, страдает от удобочитаемости.

Это существенно распаковывает список l внутри кортежа, который создается из-за наличия единственной запятой ,.


P.s: Ошибка, которую вы получаете, связана с маскировкой имени tuple, если вы назначили кортеж имени где-то, например, tuple = (1, 2, 3).

Используя del tuple, вам должно быть хорошо.

Ответ 7

Это то, что я делаю:

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