Py) 기초 - 객체(튜플)

Py) 기초 - 객체(튜플)

파이썬 기반 데이터분석을 위하여 파이썬 기본 객체중 하나인 튜플(tuple)에 대해 알아본다.


개요

튜플(tuple)은 내부 원소를 수정할 수 없기 때문에 매우 중요한 정보를 취급하는데 주로 사용된다. 직접 튜플을 생성하는 일은 잘 없으며 주로 NumPy 또는 Pandas 객체의 shape나 통계 검정 결과에서 볼 수 있다.

  • 생성
    소괄호를 사용하여 생성하며 그 원소는 쉼표로 구분함. 튜플의 원소는 숫자, 문자 뿐만 아니라 리스트 또는 기타 객체도 될 수 있다.
  • 색인
    리스트와 같이 객체뒤에 대괄호와 인덱스 번호를 명시해주어 색인(indexing) 가능하다. 인덱스 번호는 0부터 시작하며 리스트 객체 뒤에 대괄호를 사용하여 내부의 원소에 접근할 수 있음. 문자열을 다루는 것 처럼 단일 또는 연속된 인덱스에 대응하는 원소를 추출 가능하나 이산수열 인덱스에 대응하는 원소는 한 번에 추출이 불가하고 이 경우 반복문과 조건문을 사용해야 한다.
    색인에 사용하는 인덱스는 정수만 가능하며 음수의 경우 마지막 원소를 기준으로 상대적으로 얼마나 뒤에 위치하는지를 의미한다.
  • 조작
    한 번 생성한 튜플 객체의 원소를 수정할 수 없음. 단, 튜플의 원소가 튜플이 아닌 객체인 경우 해당 객체의 원소는 수정할 수 있다. 그리고 원소가 하나인 튜플을 생성할 경우 원소 뒤에 쉼표를 붙이지 않으면 소괄호를 수학 연산의 우선순위를 지정하는 소괄호로 인식하여 올바르게 튜플이 생성되지 않는다.

실습

생성 및 인덱싱

다음과 같이 소괄호를 사용하여 튜플를 생성할 수 있으며 해당 튜플에는 원소(element)가 1, 2, 3이 있다.

1
2
(1, 2, 3)
## (1, 2, 3)

튜플은 주피터 노트북 환경에서는 소괄호가 없어도 생성할 수 있다.

1
2
1, 2, 3
## (1, 2, 3)

원소가 하나인 튜플을 생성하는 경우 쉼표(comma)를 사용하지 않으면 수학연산의 소괄호로 인지하여 튜플이 생성되지 않는다.

1
2
3
4
5
(333)
## 333

(444,)
## (444,)

다음은 원소 100, 200, 300으로 구성된 튜플을 할당 연산자(assignment operator)를 사용하여 “aa” 객체(object)에 튜플을 할당하고 다음 줄에서 “aa” 객체를 확인하는 코드이다.

1
2
3
aa = (100, 200, 300)
aa
## (100, 200, 300)

튜플 내부의 단일 또는 복수개의 원소에 접근하려면 대괄호와 인덱스를 같이 써야 한다. 인덱스는 0 부터 시작하며 연속범위를 지정할 때에는 콜론을 사용한다. 그리고 연속범위 지정시 인덱스 번호가 0부터 시작한다면 콜론 왼쪽의 0은 생략할 수 있으며 콜론의 오른쪽을 생략하는 경우는 마지막 인덱스를 지정하는 것과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
aa[0]
## 100

aa[1]
## 200

aa[2]
## 300

aa[0:2]
## (100, 200)

aa[:2]
## (100, 200)

리스트 객체와 같이 마지막 원소에 접근하는 코드는 다음과 같다.

1
2
3
4
5
aa[-1]
## 300

aa[-2:]
## (200, 300)

상기 코드에서 -1은 마지막 원소. 즉, 뒤에서 첫 번째 원소를 지칭하며 -2는 뒤에서 두 번째 원소를 지칭한다. 그래서 상기 코드처럼 객체의 원소 개수에 대한 정보가 없어도 손쉽게 가장 마지막 원소를 기준으로 코드를 작성할 수 있다.

치환 및 조작

앞에서 언급했지만 튜플은 내부 원소를 수정할 수 없다. 수정하고자 한다면 새로운 튜플을 만드는 방식으로 코드를 작성해야 한다.

다음과 같이 튜플 객체 “aa”의 두 번째 원소(인덱스 번호 1번)를 999로 치환하려고 하는 경우 다음과 같이 에러가 나는 것을 볼 수 있다.

1
2
3
4
5
6
7
aa[1] = 999
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_15652\2676359828.py in <module>
----> 1 aa[1] = 999

TypeError: 'tuple' object does not support item assignment

단, 튜플의 원소가 튜플이 아니라 리스트라면 해당 리스트의 원소는 다음과 같이 수정할 수 있다.

1
2
3
4
bb = (100, 200, [4, 5, 6])
bb[2][0] = 999
bb
## (100, 200, [999, 5, 6])
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×