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