파이썬에서리스트를 튜플로 변환


544

목록을 튜플로 변환하려고합니다.

Google의 대부분의 솔루션은 다음 코드를 제공합니다.

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

그러나 코드를 실행할 때 오류 메시지가 나타납니다.

TypeError : 'tuple'객체를 호출 할 수 없습니다이 문제를 어떻게 해결할 수 있습니까?


78
tuple다른 곳 에서 변수 이름을 할당 했습니까 ?
eumiro

18
지나치게 까다 롭지는 않지만 1과 유사하기 때문에 소문자 "el"을 변수 이름으로 사용해서는 안됩니다. "li"조차도 훨씬 더 읽기 쉽습니다.
Albert Rothman

답변:


815

잘 작동합니다. 사용하지 마십시오 tuple, list또는 변수 이름과 다른 특별한 이름. 아마도 문제의 원인 일 수 있습니다.

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

109

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'>

29

다음과 같은 작업을 수행했을 수 있습니다.

>>> 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)이전 을 보유 했기 때문에 ... 지금 tupleobject유형입니다tuple ...

더 이상 type은 아니므로 더 이상은 아닙니다 Callable.

Never내장 유형을 변수 이름으로 사용하십시오. 사용할 다른 이름이 있습니다. 대신 변수에 임의의 이름을 사용하십시오 ...


25

tuple(l)Python> = 현재 다른 대안을 추가하려면 3.5다음을 수행하십시오.

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

짧고 약간 빠르지 만 가독성이 떨어질 수 있습니다.

이것은 본질적으로 l단일 쉼표로 인해 생성 된 튜플 리터럴 내부 의 목록을 압축 해제합니다 ,.


추신 : 당신이받는 오류는 이름의 마스킹으로 인한 것입니다. tuple즉, 예를 들어 어딘가에 튜플에 할당되었습니다 tuple = (1, 2, 3).

del tuple당신을 사용 하는 것이 좋습니다.


4

최신 답변이 많고 제대로 답변되었지만 답변 스택에 새로운 내용이 추가됩니다.

파이썬에는 이것을 수행하는 무한한 방법이 있습니다. 여기에 몇 가지 예가
있습니다.

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

똑똑한 방법

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

튜플은 불변이며, 중요한 것을 저장하는 데 사용됩니다. 예를 들어, 비밀번호, 키 또는 해시는 튜플 또는 사전에 저장됩니다. 칼이 필요한 경우 칼을 사용하여 사과를 자르는 이유. 그것을 현명하게 사용하면 프로그램을 효율적으로 만들 수 있습니다.


2
두 번째 방법의 장점은 무엇입니까?
Granny Aching

@GrannyAching은 현대 의이 현대 세계 정의에서 계속 변화하고 있습니다. 한 줄에 게으른 접근 방식이기 때문에 똑똑한 방법이라고 생각합니다.
TheExorcist

1
tuple(l)(첫 번째 방법)이 tuple(item for item in l)(두 번째 방법) 보다 짧습니다 .
할머니 아프기
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.