[Python 기초]

[Python] TUPLE 정리

dyk98 2024. 11. 26. 09:50

1. Tuple이란?

  • Python의 기본 데이터 타입 중 하나로, 순서가 있는 변경 불가능한(Immutable) 데이터 구조입니다.
  • 리스트와 유사하지만, 생성 후 값을 수정, 추가, 삭제할 수 없습니다.
  • 소괄호 ( )를 사용해 생성하며, 각 요소는 쉼표 ,로 구분합니다.

2. Tuple 생성 및 기본 활용

Tuple 생성

Tuple은 다양한 방식으로 생성할 수 있습니다.

하나의 요소만 가진 Tuple은 쉼표를 반드시 포함해야 합니다.

# 기본 튜플 생성
coordinates = (10, 20)

# 하나의 요소를 가진 튜플 생성
single_element_tuple = (5,)
print(type(single_element_tuple))  # <class 'tuple'>

Tuple 요소 접근

인덱스를 사용하여 요소에 접근합니다. 음수 인덱스를 통해 뒤에서부터 접근할 수도 있습니다.

coordinates = (10, 20, 30)

# 요소 접근
print(coordinates[0])  # 10
print(coordinates[-1])  # 30

Tuple 길이 확인

len() 함수를 사용하여 Tuple의 길이를 확인합니다.

print(len(coordinates))  # 3

 

3. Tuple의 주요 특징

  1. 수정 불가능: 생성된 의 값은 변경, 추가, 삭제할 수 없습니다.
  2. 다양한 자료형 저장 가능 :정수, 문자열, 리스트 등 다양한 자료형을 하나의 Tuple에 저장할 수 있습니다.
  3. 메모리 효율성: 리스트보다 메모리를 적게 사용하며 처리 속도가 빠릅니다.
  4. 사용 편의성 :인덱싱, 슬라이싱, 반복문 등에서 쉽게 활용할 수 있습니다.

4. Tuple의 주요 활용 사례

1) 함수에서 여러 값 반환

Tuple은 함수가 여러 값을 반환해야 할 때 유용합니다.

def get_user_info():
    return "Alice", 25, True  # Tuple 반환

user_info = get_user_info()
print(user_info)  # ('Alice', 25, True)

# Unpacking
name, age, is_active = user_info
print(name, age, is_active)  # Alice 25 True

2) 수정 불가능한 데이터 저장

데이터가 절대 변경되지 않아야 할 때 유용합니다.

예를 들어, 좌표나 설정값 같은 데이터를 저장할 때 사용합니다.

coordinates = (40.7128, -74.0060)  # NYC의 위도와 경도
# coordinates[0] = 50  # 오류 발생: Tuple은 수정 불가

3) 딕셔너리의 키로 사용

Tuple은 불변성을 가지므로 딕셔너리의 키로 사용하기 적합합니다.

connections = {
    (1, 2): "connected",  # Tuple을 키로 사용
    (3, 4): "disconnected"
}
print(connections[(1, 2)])  # Output: connected

4) 데이터 구조 간편화

데이터 구조가 간단할 때 사용하면 메모리 효율성과 성능이 향상됩니다.

예를 들어, 2D 또는 3D 좌표를 저장하거나 시간 데이터를 저장할 때 사용합니다.

point = (10, 20)  # 2D 좌표
x, y = point  # Unpacking
print(x, y)  # 10, 20

5) 반복 작업에서 간결함 제공

enumerate()와 같은 반복문에서 인덱스와 값을 동시에 다룰 때 Tuple을 자동으로 반환하여 효율적입니다.

fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
    print(index, fruit)
# Output:
# 0 apple
# 1 banana
# 2 cherry

5. Tuple 메소드

Tuple은 불변 자료형이므로 사용할 수 있는 메서드가 많지 않습니다. 주요 메서드는 다음과 같습니다.

  • count(): 특정 값의 개수를 셉니다.
  • index(): 특정 값의 첫 번째 인덱스를 반환합니다.
nums = (1, 2, 3, 2, 4, 2)
print(nums.count(2))  # Output: 3
print(nums.index(3))  # Output: 2

6. Tuple의 한계와 해결 방법

1) 수정 불가능

Tuple은 수정이 불가능하므로, 값을 변경하려면 리스트로 변환 후 수정해야 합니다.

my_tuple = (1, 2, 3)
temp_list = list(my_tuple)
temp_list[1] = 10
my_tuple = tuple(temp_list)
print(my_tuple)  # (1, 10, 3)

2) 크기 변경 불가

Tuple은 요소를 추가하거나 삭제할 수 없습니다.

데이터의 동적 변경이 필요한 경우 리스트를 사용해야 합니다.

# 오류 발생
my_tuple = (1, 2, 3)
# my_tuple.append(4)  # AttributeError 발생

3) 순서 기반 접근의 비효율성

Tuple은 순서 기반으로 요소를 접근하므로, 값의 존재 여부를 확인하거나 키로 조회하는 작업에 적합하지 않습니다.

my_tuple = ("Alice", "Bob", "Charlie")
# print(my_tuple.index("Eve"))  # ValueError: 존재하지 않는 값
if "Eve" in my_tuple:
    print(my_tuple.index("Eve"))
else:
    print("Value not found.")

4) 내부에 가변 객체 포함 시 문제

Tuple은 불변이지만, 내부에 리스트 같은 가변 객체가 포함되면 해당 객체는 수정될 수 있습니다.

my_tuple = ([1, 2, 3], 4)
my_tuple[0][0] = 10
print(my_tuple)  # ([10, 2, 3], 4)

 

Tuple과 Dictionary 활용

Tuple과 사전을 함께 사용하면 구조화된 데이터를 효율적으로 관리할 수 있습니다.

예제: 학생 정보 읽기 및 관리

Daniel_Kim.txt 파일 내용:

Name:   Daniel Kim
Date of Birth:  95.4.28
Email:  Danielkim@iu.edu
Department: Computer
Student ID: 201700251003
  1. 생년월일 처리 함수
def date_of_birth(date_birth):
    year, month, day = date_birth.split('.')
    year = int(year) + 1900  # 1900년대 기준
    return (int(year), int(month), int(day))

  1. 파일 데이터를 Tuple 리스트로 변환
def record_getter(filename):
    data = []
    with open(filename, "r") as file:
        for line in file:
            if line.startswith('#') or line.strip() == '':
                continue
            key, value = line.split(':')
            key = key.strip()
            value = value.strip()
            if key == 'Date of Birth':
                value = date_of_birth(value)
            data.append((key, value))
    return data
  1. Tuple 리스트를 사전으로 변환
def record_to_dict(record):
    return {key: value for key, value in record}

결과

filename = "Daniel_Kim.txt"
record = record_getter(filename)
student_info = record_to_dict(record)
print(student_info)
# Output:
# {
#    'Name': 'Daniel Kim',
#    'Date of Birth': (1995, 4, 28),
#    'Email': 'Danielkim@iu.edu',
#    'Department': 'Computer',
#    'Student ID': '201700251003'
# }

'[Python 기초]' 카테고리의 다른 글

[Python] Data type 정리  (0) 2024.11.26
[Python] SET 정리  (2) 2024.11.26
[Python] Dictionary 정리  (2) 2024.11.26
[Python] Hash 간단 정리  (0) 2024.11.26
[Python] LIST 정리  (0) 2024.11.26