[자료구조와 알고리즘] 튜플(Tuple) - Python

ByungJik_Oh·2025년 8월 25일

[Algorithms - Python]

목록 보기
2/3
post-thumbnail

📚 튜플(Tuple)

튜플(Tuple): 여러 개의 값을 가질 수 있는 순차적인 자료구조

  • 여러가지 데이터들을 ,로 구분하여 ()로 감싼 구조

  • 저장되는 요소들이 모두 같은 자료형일 필요가 없다.

  • 파이썬의 리스트와 다르게 내부의 값을 수정하거나 삭제할 수 없다.

arr = (0, 1.23, '파이썬', [0, 0])
print(f'arr: {arr}, 타입: {type(arr)}\n')

for idx, value in enumerate(arr):
    print(f'arr의 {idx + 1}번째 원소: {value},  타입: {type(value)}')
arr: (0, 1.23, '파이썬', [0, 0]), 타입: <class 'tuple'>

arr의 1번째 원소: 0,  타입: <class 'int'>
arr의 2번째 원소: 1.23,  타입: <class 'float'>
arr의 3번째 원소: 파이썬,  타입: <class 'str'>
arr의 4번째 원소: [0, 0],  타입: <class 'list'>

1. 튜플 인덱싱(Indexing)

  • 튜플의 인덱스(Index)로 튜플의 원소에 접근할 수 있으며, 0부터 (튜플의 크기 - 1)까지로 구성된다.

  • 이때, 리스트와 마찬가지로 -1을 사용할 경우 튜플의 크기와 관계없이 튜플의 마지막 원소를 가져온다.

arr = (10, 20, 30, 40, 50)

print(arr[0], arr[3], arr[4]) # 10 40 50
print(arr[-1]) # 50

그러나 리스트와는 다른 점이 하나 있는데, 한번 생성된 튜플은 인덱싱을 통해 원소를 변경하지 못한다.

arr1 = [10, 20, 30, 40, 50]

arr1[1] = 700
print(arr1) # [10, 700, 30, 40, 50]

arr2 = (10, 20, 30, 40, 50)

arr2[1] = 700
print(arr2)
# TypeError: 'tuple' object does not support item assignment

2. 튜플 슬라이싱(Slicing)

  • 튜플의 인덱스를 지정하여 원소를 불러올 때, 중간에 :을 사용하여 원하는 범위의 값을 가져올 수 있다.
arr = (10, 20, 30, 40, 50)

# 1번째 원소 ~ 3번째 원소
print(arr[1:4]) # (20, 30, 40)

# 2번째 원소 ~
print(arr[2:]) # (30, 40, 50)

# ~ 3번째 원소
print(arr[:4]) # (10, 20, 30, 40)

# 모든 원소
print(arr[:]) # (10, 20, 30, 40, 50)

그러나 마찬가지로 리스트와는 다르게 슬라이싱을 통한 수정도 불가능하다.

arr1 = [10, 20, 30, 40, 50]

arr1[1:3] = [2, 3]
print(arr1) # [10, 2, 3, 40, 50]

arr2 = (10, 20, 30, 40, 50)

arr2[1:3] = (2, 3)
print(arr2)
# TypeError: 'tuple' object does not support item assignment

3. 튜플 연산자(Operator)

  • +, *를 사용하여 튜플을 합치거나, 반복하는 작업을 할 수 있다.
arr1 = (10, 20, 30)
arr2 = (30, 40, 50)

print(arr1 + arr2) # (10, 20, 30, 30, 40, 50)
print(arr1 * 3) # (10, 20, 30, 10, 20, 30, 10, 20, 30)

이때, 튜플 내부의 값을 수정할 수는 없지만 +를 사용하여 리스트의 append() 함수 또는 extend() 함수와 비슷하게 원소를 추가하는데에 사용할 수 있다.

arr = (10, 20, 30, 40, 50)

arr += (100,)
print(arr) # (10, 20, 30, 40, 50, 100)

arr += (200, 300)
print(arr) # (10, 20, 30, 40, 50, 100, 200, 300)

4. 튜플과 관련된 함수

튜플은 리스트와 다르게 자신에게만 사용가능한 특별한 함수는 존재하지 않는다.

따라서 튜플을 사용할 때 list() 함수를 사용하여 튜플을 리스트로 변환한 후,
리스트의 함수들을 사용하여 값을 조정한 뒤,
다시 tuple() 함수를 사용하여 다시 튜플로 변환해주는 방법을 많이 사용한다.

arr = (10, 20, 30, 40, 50)

arr = list(arr)
print(arr) # [10, 20, 30, 40, 50]

arr.append(100)
print(arr) # [10, 20, 30, 40, 50, 100]

n = arr.pop(3)
print(arr) # [10, 20, 30, 50, 100]

arr = tuple(arr)
print(arr) # (10, 20, 30, 50, 100)
print(len(arr)) # 5

5. 튜플의 정렬

튜플을 정렬할 때도 리스트와 다르게 sort() 함수를 사용할 수 없다.

따라서 list() 함수를 이용하여 정렬을 하거나,
바로 정렬 후 리스트로 값을 반환해주는 sorted() 함수를 사용한다.

5.1 sort()

arr = (10, 50, 80, 40, 20)

arr.sort()
print(arr)
# AttributeError: 'tuple' object has no attribute 'sort'
arr = (10, 50, 80, 40, 20)

arr = list(arr)
arr.sort()
print(arr) # [10, 20, 40, 50, 80]

arr = tuple(arr)
print(arr) # (10, 20, 40, 50, 80)

5.2 sorted()

arr = (10, 50, 80, 40, 20)

arr = sorted(arr)
print(arr) # [10, 20, 40, 50, 80]

arr = tuple(arr)
print(arr) # (10, 20, 40, 50, 80)

위 코드에서 볼 수 있듯이 sorted() 함수의 경우 따로 리스트로 변경하여 전달하지 않아도 내부적으로 정렬 후, 리스트 형태로 반환해주는 것을 볼 수 있다.


profile
精進 "정성을 기울여 노력하고 매진한다"

0개의 댓글