파이썬

튜플 ( 컬렉션 타입 )

96__혀누 2024. 3. 13. 17:14

튜플 tuple

리스트와 같이, 여러 타입의 데이터들을 저장할 수 있지만, 리스트와 달리, 데이터의 변경이 불가능( immutable )
( ) 안에 데이터들을 입력하여 생성하며, 항목들은 콤마( , )로 구분된다.

 

⁙ 하나의 데이터만 입력할 경우에도, 콤마( , )를 붙혀야 한다.

tu1 = (1,) # 요소가 1개일 경우, 끝에 콤마( , ) 붙혀야 한다.  
print(tu1)

tu2 = (1, 3, 5, 7)
print(tu2)
print(type(tu2))

>>>
(1,)

(1, 3, 5, 7)
<class 'tuple'>  # 데이터 타입은 tuple


# 다른 방법으로 튜플 생성하기
tu3 = tuple([1, 3, 5, 7])
print(tu3)
print(type(tu3))

>>>
(1, 3, 5, 7)
<class 'tuple'>

tu4 = 1, 3, 5, 7
print(tu4)
print(type(tu4))

>>>
(1, 3, 5, 7)
<class 'tuple'>
# 문자형 및 리스트, 튜플 타입의 데이터가 튜플에 포함될 수 있다.
tu5 = ('apple', 'banana', ('🍎', '🍓'))
tu6 = ('apple', 'banana', ['🍎', '🍓']) 
print(tu5)
print(tu6)

>>>
('apple', 'banana', ('🍎', '🍓'))
('apple', 'banana', ['🍎', '🍓']) 

 

인덱싱과 슬라이싱

 

인덱싱 및 슬라이싱이 가능하며, 데이터들의 각각의 데이터타입은 유지된다.

# 인덱싱
tu1 = (1, 2, 'apple', 'banana')
print(tu1[0])
print(tu1[-1])

>>>
1
banana

# 슬라이싱
tu1 = (1, 2, 'apple', 'banana')
print(tu1[1:])
print(tu1[1:3])

>>>
(2, 'apple', 'banana')
(2, 'apple')

---------------------------------------------------------

tu5 = ('apple', 'banana', ('🍎', '🍓'))
print(tu5)
print(tu5[0])
print(tu5[2][0])
print(type(tu5))
print(type(tu5[2]))
print(type(tu5[2][0]))

>>>

('apple', 'banana', ('🍎', '🍓'))
apple
🍎
<class 'tuple'>
<class 'tuple'>
<class 'str'>

 

튜플은 리스트와 달리, 데이터의 변경이 불가능하다.

 

튜플을 데이터의 추가, 삭제, 변경이 불가능하다.
튜플안의 데이터를 변경하여 할 시, 오류가 발생한다.

tu5 = ('apple', 'banana', ('🍎', '🍓'))
tu5[0] = 'orange'

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

## 튜플 데이터를 변경하고 싶다면, list() 함수를 이용하여, 튜플 타입의 데이터를 리스트 타입으로 변환 후,
원하는 데이터를 변경한 뒤, tuple() 함수를 사용하여, 다시 튜플 타입으로 지정할 수 있다.


## 튜플안의 데이터의 변경은 불가능 하나, 변수의 변경은 가능하다.

tu5 = ('apple', 'banana', ('🍎', '🍓'))
tu5 = 'orange'
print(tu5)

>>> orange

 

연산

 

튜플의 연산은 리스트와 동일하다.

tu1 = (10, 20, 30)
tu2 = (40, 50, 60)

print(tu1 + tu2)  # 리스트와 동일하게 순서대로 연산
print(tu2 + tu1)

tu1 = tu1 + (40, 50)
print(tu1)

print(tu1 * 3)

>>>
(10, 20, 30, 40, 50, 60)
(40, 50, 60, 10, 20, 30)
(10, 20, 30, 40, 50)
(10, 20, 30, 40, 50, 10, 20, 30, 40, 50, 10, 20, 30, 40, 50)

--------------------------------------------------------------

# 요소끼리의 연산 가능
tu3 = (10, 20, 30)
print(tu3[0] + tu3[2])

>>> 40

 

언패킹

 

튜플의 항목들을 각각의 변수에 할당할 수 있다. ( 리스트도 가능 )

apple, banana, orange = ('김사과', '반하나', '오렌지')
print(apple)
print(banana)
print(orange)

# 다른방법
apple, banana, orange = '김사과', '반하나', '오렌지'
print(apple)
print(banana)
print(orange)

>>>
김사과
반하나
오렌지

 

in 연산자

 

해당 튜플에 특정 데이터가 있는지 확인할 수 있다.

print(2 in (2, 4, 6, 8, 10))
print(3 in (2, 4, 6, 8, 10))

>>>
True
False

 

sorted() 함수

 

튜플에는 sort와 같은 인플레이스 메서드를 사용할 수 없다.
sorted() 함수를 사용하면, 해당 튜플을 리스트 타입으로 반환할 수 있으며,
튜플 타입의 데이터를 리스트 타입으로 변환 후, 데이터를 변경 후, 다시 튜플로 지정할 수 있다.

tu1 = (10, 30, 20, 70)
# sort() 메서드 사용 시, 에러가 발생한다.
tu1.sort() # NameError: name 'tu' is not defined

# sorted 함수를 사용할 수 있으며, 리스트로 반환한다.
tu1 = sorted(tu1)
print(tu1)

tu1 = tuple(tu1) # 다시 튜플로 변경
print(type(tu1))

>>>
[10, 20, 30, 70]
<class 'tuple'>