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