요소가 하나만있는 튜플을 만드는 방법


107

아래 예제에서 모든 요소가 튜플이 될 것으로 예상합니다. 튜플이 단일 문자열 만 포함 할 때 왜 문자열로 변환됩니까?

>>> a = [('a'), ('b'), ('c', 'd')]
>>> a
['a', 'b', ('c', 'd')]
>>> 
>>> for elem in a:
...     print type(elem)
... 
<type 'str'>
<type 'str'>
<type 'tuple'>

1
('a')그냥 평가'a'
oldrinb 2010 년

1
- 월드 오브 워크래프트 - 3 개 정확한 답변 3 분 :) 그러나의 비밀주의 ,:a = 1, 2, 3; print a

26
대괄호는 튜플을 만들지 않고 쉼표는 만듭니다.
cdarke

17
()한 쌍의 괄호로만 구성된 빈 튜플을 제외하고 @cdarke .
Frédéric Hamidi

2
사실 또는 오히려 False-거의 모든 빈 튜플이 좋습니다 (내 말이 무엇인지 알면).
cdarke

답변:


140

처음 두 요소는 튜플이 아니기 때문입니다. 그들은 단지 문자열입니다. 괄호는 자동으로 튜플을 만들지 않습니다. 튜플이어야 함을 파이썬에 나타 내기 위해 문자열 뒤에 쉼표를 추가해야합니다.

>>> type( ('a') )
<type 'str'>

>>> type( ('a',) )
<type 'tuple'>

예제 코드를 수정하려면 여기에 쉼표를 추가하세요.

>>> a = [('a',), ('b',), ('c', 'd')]

             ^       ^

로부터 파이썬 문서 :

특별한 문제는 0 개 또는 1 개의 항목을 포함하는 튜플을 구성하는 것입니다. 구문에는 이러한 항목을 수용하기위한 몇 가지 추가 특성이 있습니다. 빈 튜플은 빈 괄호 쌍으로 구성됩니다. 하나의 항목이있는 튜플은 쉼표가있는 값을 따라 구성됩니다 (단일 값을 괄호로 묶는 것으로 충분하지 않습니다). 못 생겼지 만 효과적입니다.

후행 쉼표 구문이 정말 싫다면 해결 방법은 a listtuple()함수 에 전달하는 것입니다 .

x = tuple(['a'])

6
이것은 매우 우아하지 않으며 다소 혼란스러워 보입니다. 다른 방법이 있습니까?
로버트 무어

3
작동하지 않는 것 같습니다. 예 : tuple ( "abc") (추가 쉼표 포함 또는 제외)는 ( 'a', 'b', 'c')를 제공하고 ( "abc",)는 ( 'abc')를 제공합니다. 따라서 tuple ()은 여기에서 실행 가능한 옵션이 아닌 것 같습니다.
Ben Farmer

3
@Ben 문서를 보세요 . 문자열이 (문자에 tuple 대해 반복 ) 인 iterable을 허용합니다 . 후행 쉼표를 사용하지 않으려면 중간 목록을 만드십시오 tuple(['abc'])..
Jonathon Reinhart의

물론, 튜플 함수가 쉼표의 필요성을 부정하지 않는다는 것입니다.
Ben Farmer

1
@matanster 이와 관련하여 언어 구문은 변경되지 않았습니다. AFAIK 문제는 Python 2와 3에서도 동일합니다.
Jonathon Reinhart

20

처음 두 예제는 튜플이 아니라 문자열입니다. 단일 항목 튜플에는 다음과 같이 후행 쉼표가 필요합니다.

>>> a = [('a',), ('b',), ('c', 'd')]
>>> a
[('a',), ('b',), ('c', 'd')]

11

('a') 튜플이 아니라 문자열입니다.

끝에 쉼표를 추가하여 python다음과 같이 처리해야합니다 tuple.-

>>> a = [('a',), ('b',), ('c', 'd')]
>>> a
[('a',), ('b',), ('c', 'd')]
>>> 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.