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의 주요 특징
- 수정 불가능: 생성된 의 값은 변경, 추가, 삭제할 수 없습니다.
- 다양한 자료형 저장 가능 :정수, 문자열, 리스트 등 다양한 자료형을 하나의 Tuple에 저장할 수 있습니다.
- 메모리 효율성: 리스트보다 메모리를 적게 사용하며 처리 속도가 빠릅니다.
- 사용 편의성 :인덱싱, 슬라이싱, 반복문 등에서 쉽게 활용할 수 있습니다.
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
- 생년월일 처리 함수
def date_of_birth(date_birth):
year, month, day = date_birth.split('.')
year = int(year) + 1900 # 1900년대 기준
return (int(year), int(month), int(day))
- 파일 데이터를 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
- 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 |