본문 바로가기
Python/Basic

[파이썬, Python] 자료구조(Data Structure) - 2️⃣튜플(tuple)

by coding-choonsik 2023. 3. 7.
728x90
반응형
SMALL

1. 튜플(tuple)

  • <class 'tuple'>
  • 리스트와 비슷하지만 리스트는 대괄호로 자료를 감싸고, 튜플은 소괄호로 감쌈
  • 튜플 내 요소의 수정, 삭제 불가능
  • 요소가 바뀌지 않아야 하는 경우에 사용

 

1-1. 튜플의 생성

1) 대괄호로 감싼다.

tu1 = ()
print(tu1)
>>> ()
print(type(tu1))
>>> <class 'tuple'>

2) tuple 함수 사용, 여러 요소를 만들 땐 대괄호로 감싼다.(리스트 구조는 아님)

tu2 = tuple([1, 3, 5, 7])
print(tu2)
>>> (1, 3, 5, 7)

3) 요소만 넣기

tu3 = 1, 3, 5, 7  
print(tu3)
>>> (1, 3, 5, 7)

print(type(tu3))
>>> <class 'tuple'>

1-2. 튜플의 항목

1) 다차원의 튜플 생성 가능

tu4 = ('apple', 'banana', ('🍓', '🍒', '🍑')) 
print(tu4)

>>> ('apple', 'banana', ('🍓', '🍒', '🍑'))

 

2) 튜플 내 리스트 형태의 요소 생성 가능

tu5 = ('apple', 'banana', ['🍓', '🍒', '🍑'])   
print(tu5)
>>> ('apple', 'banana', ['🍓', '🍒', '🍑'])

print(type(tu5))
>>> <class 'tuple'>

3) 튜플은 중복된 데이터를 포함

tu5 = ('apple', 'banana', ['🍓', '🍒', '🍑'], 'banana')   
print(tu5)
>>> ('apple', 'banana', ['🍓', '🍒', '🍑'], 'banana')

2. 튜플의 수정 및 삭제

  • 한 번 정의된 튜플은 새로운 데이터를 추가하거나 데이터의 수정 및 삭제가 불가능
  • 튜플내 데이터를 인덱싱하여 삭제하는 것도 당연히 불가능하다.
tu6 = (1, 2, 'apple', 'banana')
print(tu6)
>>> (1, 2, 'apple', 'banana')

print(tu6[2])   # 튜플도 인덱싱 가능
>>> apple

# 튜플 내 요소의 수정이 불가능
tu6[2] = 'orange'   
>>> TypeError: 'tuple' object does not support item assignment

del tu6[2]   

>>> TypeError: 'tuple' object doesn't support item deletion
del tu6   # 튜플 전체는 삭제가능

  • 다음 코드는 튜플의 리스트 요소 내 데이터를 변경하는 것이기 때문에 정상적으로 출력된다.
tu7 = ('apple', 'banana', ['🍓', '🍒', '🍑'])  
tu7[2][1] = '🍍'
print(tu7)

>>> ('apple', 'banana', ['🍓', '🍍', '🍑'])

  • 튜플 내 리스트 요소 자체는 수정 불가
tu7 = ('apple', 'banana', ['🍓', '🍒', '🍑']) 
tu7[-1] = ['🍕', '🍔', '🍟']  

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

  • tu8 변수가 가리키는 데이터의 주소 자체가 변경된 것이기 때문에  데이터를 바꾸는 것이 가능
tu8 = ('apple', 'banana', ['🍓', '🍒', '🍑'])  
print(tu8)
>>> ('apple', 'banana', ['🍓', '🍒', '🍑'])

tu8 = '❤'
print(tu8)
>>> ❤

아래 그림을 보면 이해하기 쉽다.


3. 튜플의 인덱싱과 슬라이싱 연산

3-1. 인덱싱

  •  리스트와 같은 방식으로 인덱싱이 가능하다.
tu9 = (1, 2, 'apple', 'banana')

print(tu9[0])
>>> 1

print(tu9[-1])
>>> banana

3-2. 슬라이싱

tu9 = (1, 2, 'apple', 'banana')

print(tu9[1:])
>>> (2, 'apple', 'banana')

print(tu9[1:3])
>>> (2, 'apple')

print(tu9[:-1])
>>> (1, 2, 'apple')   # 끝에서 첫번째 인덱스 직전까지

3-3. 튜플의 덧셈

  • 리스트와 마찬가지로 튜플의 덧셈연산은 결합이다.
tu9 = (1, 2, 'apple', 'banana')
tu10 = (30, 40)

print(tu9 + tu10)
>>> (1, 2, 'apple', 'banana', 30, 40)
  • 튜플 내 요소가 변경된 것은 아니다.


3-4. 튜플의 곱셈

  • 리스트와 마찬가지로 튜플과 일반 상수와의 곱 연산은 튜플의 반복이다.
tu9 = (1, 2, 'apple', 'banana')

print(tu9 * 3)
>>> (1, 2, 'apple', 'banana', 1, 2, 'apple', 'banana', 1, 2, 'apple', 'banana')

3-5. 튜플의 요소 갯수 알아보기

  • len() 함수 이용
tu9 = (1, 2, 'apple', 'banana')

print(len(tu9))
>>> 4

4.튜플의 정렬

  • 튜플은 sort()함수의 기능이 없음
tu11 = (1, 2, 3, 0)

print(tu11)
>>> print(tu11)

tu11.sort() 
>>> AttributeError: 'tuple' object has no attribute 'sort'

✔ 그렇다면 튜플 내 데이터를 정렬할 때는 어떤 방식을 사용할까? 🤔

  • 리스트로 변환 후 정렬하기
list_tu11 = list(tu11)
print(list_tu11)
>>> [1, 2, 3, 0]

list_tu11.sort()
print(list_tu11)
>>> [0, 1, 2, 3]

 

  • sorted()함수를 이용하여 리스트로 반환하여 정렬하기
  • sorted(): iterable 객체로부터 정렬된 리스트를 생성하기 때문에 sorted() 함수 적용 후 출력 시 리스트로 반환
tu12 = sorted(tu11)
print(tu12)
>>> [0, 1, 2, 3]

 

728x90
반응형
LIST