2012-01-17 3 views
105
>>> x=[1,2] 
>>> x[1] 
2 
>>> x=(1,2) 
>>> x[1] 
2 

둘 모두 유효합니까? 어떤 이유로 든 하나가 선호됩니까?파이썬에서 대괄호와 괄호로 묶인 목록의 차이점은 무엇입니까?

+0

FYI : '(i for i in ...)'와 '[i for i in ...]'사이에는 더 큰 차이가 있습니다. –

+1

@RikPoggi 중대한 차이점은 무엇입니까? 정교하게 제발 주시겠습니까? – qazwsx

+8

첫 번째 것은 ** 생성기 표현식 **이고 두 번째 것은 ** 목록 이해력 **입니다. 여기에 몇 가지 정보가 있습니다 : [목록 이해력에 대한 공식 자습서] (http://docs.python.org/py3k/tutorial/datastructures.html#list-comprehensions), [PEP 289] (http : //www.python .org/dev/peps/pep-0289 /). 그리고 여기에 몇 가지 운영 체제 질문 : [발전기 표현 대 목록 이해] (http://stackoverflow.com/questions/47789/generator-expressions-vs-list-comprehension), [발전기 - 이해력] (http : // stackoverflow .com/questions/364802/generator-comprehension). –

답변

185

대괄호는 tuples입니다. 대괄호는 lists이며 괄호는 tuples입니다. 튜플이없는 동안

>>> x = [1,2] 
>>> x.append(3) 
>>> x 
[1, 2, 3] 

:

목록은 당신이 그 내용을 변경할 수 있습니다 의미, 변경 가능한

>>> x = (1,2) 
>>> x 
(1, 2) 
>>> x.append(3) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'tuple' object has no attribute 'append' 

다른 주요 차이점은 튜플은 당신이 할 수있는 것을 의미 해쉬 때문이다 사전에 키로 사용하십시오. 예를 들어 많은 사람들이 지적 것을

>>> x = (1,2) 
>>> y = [1,2] 
>>> z = {} 
>>> z[x] = 3 
>>> z 
{(1, 2): 3} 
>>> z[y] = 4 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unhashable type: 'list' 

주, 당신은 함께 튜플을 추가 할 수 있습니다. 예를 들어 :

그러나
>>> x = (1,2) 
>>> x += (3,) 
>>> x 
(1, 2, 3) 

, 이 튜플 변경할 수 있습니다 의미하지 않는다. 위의 예제에서, 새로운 튜플은 두 개의 튜플을 인수로 추가하여 생성됩니다. 원래 튜플은 수정되지 않습니다. 이를 설명하기 위해, 다음 사항을 고려 반면

>>> x = (1,2) 
>>> y = x 
>>> x += (3,) 
>>> x 
(1, 2, 3) 
>>> y 
(1, 2) 

을, 당신은 목록이 같은 예를 구성한다면, y도 업데이트 될 것입니다 :

>>> x = [1, 2] 
>>> y = x 
>>> x += [3] 
>>> x 
[1, 2, 3] 
>>> y 
[1, 2, 3] 
+1

사실 우리는'(1,2) + (3,) # (1,2,3)'또는'(1,2) + (3,4) # (1,2, 3,4)'그러나 우리는 사물을 수정할 수 없다. –

+2

@AlexisPaques - 원래 튜플이 수정되지 않았으므로 실제로 추가되지 않습니다. 두 개의 기존 튜플을 더한 결과로 * 새 튜플을 생성합니다. – jterrace

+0

사실, 당신 말이 맞습니다. 내 실수 –

2

첫 번째 목록은 두 번째 튜플입니다. 리스트는 변경 가능하고, 튜플은 변경 가능하지 않습니다.

자습서의 Data Structures 섹션과 설명서의 Sequence Types 섹션을 살펴보십시오.

4

이들은 목록이 아니며 목록과 튜플입니다. 파이썬 튜토리얼에서 약 tuples을 읽을 수 있습니다. 목록을 변형 할 수는 있지만 튜플에서는 불가능합니다. () 둘러싸인

In [1]: x = (1, 2) 

In [2]: x[0] = 3 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 

/home/user/<ipython console> in <module>() 

TypeError: 'tuple' object does not support item assignment 
3

쉼표로 구분 항목 tuple S이다 [] 둘러싸인들은 list S이다.

+1

"둥근"괄호로 묶인 목록이 없습니다.이 목록은 튜플입니다! 그러나 아마도 당신은 옳은 것을 의미 할 것입니다. ': P' – Gandaro

+1

_ (와)로 묶인리스트는 튜플입니다. .. 나는 목록이나 튜플이 헷갈 렸습니다. – juliomalegria

+0

@ julio.alegria @FlopCoder가 쓰려고했던 것은 "** ('과')로 묶인 항목은'튜플 '이고,'['와']로 묶인 항목은'list's . " – funroll

0

대괄호와 괄호가 다른 또 다른 방법은 대괄호가 목록 내포를 설명 할 수 있다는 것입니다. 해당 괄호로 구문 반면 [x for x in y]

는 튜플 발전기을 지정 (x for x in y)

다음을 사용하여 튜플의 이해를 얻을 수 있습니다 : tuple(x for x in y)

참조 : Why is there no tuple comprehension in Python?

0

한 가지 흥미로운 차이점 가치가 눈여겨볼 때입니다 하나의 값만 존재합니다.

lst=[1] 
print lst   // prints [1] 
print type(lst) // prints <type 'list'> 

notATuple=(1) 
print notATuple  // prints 1 
print type(notATuple) // prints <type 'int'> 
             ^^ 

쉼표는 단일 값만 포함되어 있어도 튜플에 포함되어야합니다. 예 : (1) 대신 (1,)입니다.

관련 문제