19.5 튜플 사용하기
변수에 값을 저장할 때 ( )(괄호)로 묶어주면 튜플이 되며 각 값은 ,(콤마)로 구분해줍니다. 또는, 괄호로 묶지 않고 값만 콤마로 구분해도 튜플이 됩니다.
- 튜플 = (값, 값, 값)
- 튜플 = 값, 값, 값
그럼 숫자가 5개 들어있는 튜플을 만들어보겠습니다.
>>> a = (38, 21, 53, 62, 19) >>> a (38, 21, 53, 62, 19)
a = (38, 21, 53, 62, 19)와 같이 변수에 괄호로 값을 저장하여 튜플을 만들었습니다(물론 숫자뿐만 아니라 문자열, 정수, 실수, 불, 리스트, 튜플, 딕셔너리, 세트, 함수 등도 넣을 수 있습니다).
튜플도 리스트와 마찬가지로 값에 접근할 때는 [ ]를 사용합니다.
- 튜플[인덱스]
>>> a = (38, 21, 53, 62, 19) >>> a[0] 38 >>> a[2] 53 >>> a[4] 19
하지만 튜플은 리스트와는 달리 요소의 값을 변경하거나 추가할 수 없습니다.
>>> a = (38, 21, 53, 62, 19) >>> a[0] = 10 Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> a[0] = 10 TypeError: 'tuple' object does not support item assignment
a[0] = 10과 같이 튜플에 인덱스를 지정한 뒤 값을 할당하려고 하면 에러가 발생합니다. 즉, 튜플은 읽기 전용 자료형입니다.
튜플의 요소 개수를 구할 때도 len을 사용합니다. 그리고 시작 인덱스와 끝 인덱스를 활용하는 방법은 리스트와 같습니다. 이 부분은 따로 설명하지 않겠습니다.
지금까지 요소가 여러 개 들어있는 튜플을 만들었습니다. 그럼 요소가 한 개 들어있는 튜플은 어떻게 만들까요? 다음과 같이 값 한 개를 괄호로 묶으면 튜플이 아니라 그냥 값이 됩니다. 여기서는 그냥 정수입니다.
>>> (38) 38
요소가 한 개인 튜플을 만들 때는 ( )(괄호) 안에 값 한 개를 넣고 ,(콤마)를 붙입니다. 또는, 괄호로 묶지 않고 값 한 개에 ,를 붙여도 됩니다.
- 튜플 = (값, )
- 튜플 = 값,
>>> (38, ) (38,) >>> 38, (38,)
튜플은 요소를 변경하거나 추가할 수도 없는데 값 한 개짜리 튜플은 왜 필요할까요? 나중에 함수(클래스)를 사용하다 보면 값이 아닌 튜플을 넣어야 할 경우가 생깁니다. 이때 값은 한 개지만 튜플을 넣어야 할 때 (값, )과 같은 형식을 사용해야 합니다.
참고로 a = () 또는, a = tuple()로 빈 튜플을 만들 수 있습니다. 빈 튜플은 쓸모가 없을 것 같지만 함수(클래스)에 튜플을 넣어야 할 때 사용합니다. 즉, 넣을 값은 없지만 튜플을 넣어야 할 때 ()와 같이 사용합니다.
이번에는 tuple을 사용하여 튜플을 만들어보겠습니다.
- 튜플 = tuple(리스트) 또는 튜플 = tuple(list())
- 튜플 = tuple(range(횟수))
- 튜플 = tuple(range(시작, 끝))
- 튜플 = tuple(range(시작, 끝, 증가폭))
>>> a = tuple([1, 2, 3]) >>> a (1, 2, 3) >>> b = tuple(range(10)) >>> b (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) >>> c = tuple(range(10, 0, -1)) >>> c (10, 9, 8, 7, 6, 5, 4, 3, 2, 1) >>> d = tuple(range(5, 12)) >>> d (5, 6, 7, 8, 9, 10, 11) >>> e = tuple(range(10, 20, 2)) >>> e (10, 12, 14, 16, 18)
tuple([1, 2, 3])와 같이 tuple에 리스트를 바로 넣어도 되고, range를 사용해도 됩니다. 물론 range의 기능을 활용하여 특정 범위의 숫자를 넣거나 숫자의 순서를 역순으로 넣을 수도 있습니다.
그럼 list에 튜플을 넣으면 어떻게 될까요?
>>> list((1, 2, 3)) [1, 2, 3] >>> list(tuple(range(10))) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list에 튜플을 넣더라도 list를 사용했으므로 최종 결과는 리스트입니다.
지금까지 리스트와 튜플의 다양한 사용 방법에 대해 알아보았습니다. 리스트와 튜플에서 가장 중요한 부분은 인덱스가 0부터 시작한다는 점입니다. 꼭 기억해두세요. 그리고 리스트(튜플)의 길이를 구하는 방법, 범위로 접근할 때 음수를 사용하는 방법, 끝 인덱스를 생략하는 방법은 자주 사용하므로 익혀 두는 것이 좋습니다.
리스트와 튜플을 사용하면 변수 여러 개를 한 번에 만들 수 있습니다. 이때 변수의 개수와 리스트(튜플)의 요소 개수는 같아야 합니다.
>>> a, b, c = [1, 2, 3] >>>print(a, b, c) 1 2 3 >>> d, e, f = (4, 5, 6) >>> print(d, e, f) 4 5 6
리스트와 튜플 변수로도 변수 여러 개를 만들 수 있습니다. 다음과 같이 리스트와 튜플의 요소를 변수 여러 개에 할당하는 것을 리스트 언패킹(list unpacking), 튜플 언패킹(tuple unpacking)이라고 합니다.
>>> x = [1, 2, 3] >>> a, b, c = x >>> print(a, b, c) 1 2 3 >>> y = (4, 5, 6) >>> d, e, f = y >>> print(d, e, f) 4 5 6
그리고 리스트 패킹(list packing)과 튜플 패킹(tuple packing)은 변수에 리스트 또는 튜플을 할당하는 과정을 뜻합니다.
a = [1, 2, 3] # 리스트 패킹 b = (1, 2, 3) # 튜플 패킹 c = 1, 2, 3 # 튜플 패킹