Ответ 1
Он должен работать нормально. Не используйте tuple
, list
или другие специальные имена в качестве имени переменной. Вероятно, это является причиной вашей проблемы.
>>> l = [4,5,6]
>>> tuple(l)
(4, 5, 6)
Я пытаюсь преобразовать список в кортеж.
Когда я google, я нахожу ответы, похожие на:
l = [4,5,6]
tuple(l)
Но если я сделаю это, я получу это сообщение об ошибке:
TypeError: объект 'tuple' не может быть вызван
Как я могу исправить эту проблему?
Он должен работать нормально. Не используйте tuple
, list
или другие специальные имена в качестве имени переменной. Вероятно, это является причиной вашей проблемы.
>>> l = [4,5,6]
>>> tuple(l)
(4, 5, 6)
Развернув комментарий 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)
раньше... Итак, теперь tuple
является object
типа tuple
теперь...
Это больше не type
и, следовательно, оно больше не Callable
.
Never
используйте любые встроенные типы в качестве имени переменной... У вас есть другое имя для использования. Вместо этого используйте любое произвольное имя для вашей переменной...
l = [4,5,6]
для преобразования списка в кортеж,
l = tuple(l)
Я нахожу много ответов в актуальном состоянии и правильно ответил, но добавлю что-то новое в стек ответов.
В 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')
Помните, что кортеж является неизменным, используется для хранения чего-то ценного. Например, пароль, ключ или хеши хранятся в кортежах или словарях. Если нужен нож, зачем использовать меч для резки яблок. Используйте его с умом, также сделайте свою программу эффективной.
Чтобы добавить еще одну альтернативу tuple(l)
, с Python >= 3.5
вы можете сделать:
t = *l, # or t = (*l,)
короткий, немного быстрее, но, вероятно, страдает от удобочитаемости.
Это существенно распаковывает список l
внутри кортежа, который создается из-за наличия единственной запятой ,
.
P.s: Ошибка, которую вы получаете, связана с маскировкой имени tuple
, если вы назначили кортеж имени где-то, например, tuple = (1, 2, 3)
.
Используя del tuple
, вам должно быть хорошо.
Это то, что я делаю:
l = [4,5,6]
tuplex = tuple(l)
print(tuplex)