튜플이란?
안녕하세요. 이번에는 파이썬 튜플(Tuple)에 대해 자세히 알아보겠습니다. 여러분께서는 튜플이 무엇인지, 왜 사용하는지 궁금해 하실 것 같습니다. 튜플은 값의 나열로 이루어진 순차 자료형입니다. 리스트와 비슷해 보이지만 한 번 생성하면 추가, 삭제, 수정이 불가능하다는 점이 다릅니다.
프로그래밍에서 튜플은 왜 필요할까요? 불변(immutable) 자료형이 필요한 상황에서 튜플을 사용합니다. 예를 들어 어떤 데이터가 절대 변하면 안 되거나, 값 목록을 키로 사용해야 할 때 등입니다. 또한 튜플은 리스트에 비해 공간 효율적이며 처리 속도도 빠릅니다.
그렇다면 구체적으로 튜플을 어떻게 만들고, 다루는지 알아보도록 하겠습니다.
튜플 생성하기
튜플은 소괄호 ()를 사용하여 만들 수 있습니다. 값들을 쉼표로 구분하여 소괄호 안에 넣으면 됩니다.
point = (3, 4)
colors = ("red", "green", "blue")
person = ("John", 32, 175.5)
만약 한 개의 항목으로 이루어진 튜플을 만들 때는 값 뒤에 쉼표를 붙여주어야 합니다. 그렇지 않으면 튜플로 인식되지 않습니다.
num = (42) # 이것은 int
num_tuple = (42,) # 이것이 튜플
소괄호 없이 생성할 수도 있습니다.
rgb = 255, 128, 0 # 튜플 unpacking으로도 활용 가능
튜플은 한 번 생성하면 요소를 추가, 삭제, 수정할 수 없습니다. 예를 들어 다음과 같은 시도는 오류가 납니다.
nums = (1, 2, 3)
nums[0] = 4 # 오류발생: 튜플은 변경 불가
nums.append(4) # 오류발생: 요소 추가 불가
del nums[0] # 오류발생: 요소 삭제 불가
단, 튜플 자체는 새로운 튜플에 재할당될 수 있습니다.
nums = (1, 2, 3)
nums = (4, 5, 6) # 새로운 튜플 생성
이처럼 튜플은 불변 자료형이므로 내부 요소를 바꿀 순 없지만, 새 튜플을 만들어 할당하는 것은 가능합니다.
튜플 수정을 위한 방법
그렇다면 기존 튜플의 요소를 수정해야 하는 경우에는 어떻게 해야 할까요? 방법은 다음과 같습니다.
nums = (1, 2, 3)
# 리스트로 변환하여 수정한 뒤 다시 튜플로 만들기
nums = list(nums)
nums[0] = 4
nums = tuple(nums)
print(nums) # (4, 2, 3)
# 슬라이싱을 이용해 새 튜플 생성
nums = (4,) + nums[1:]
print(nums) # (4, 2, 3)
첫 번째 방법은 튜플을 list() 로 리스트로 변환한 후 수정하고, 다시 tuple()로 튜플 형태로 만드는 것입니다. 두 번째 방법은 슬라이싱으로 일부를 새 튜플로 합치는 방식입니다.
이렇게 조금 번거롭지만, 기존 튜플을 직접 수정하는 대신 새 튜플을 생성해야 합니다. 이는 불변성(immutability)을 지키기 위함입니다.
튜플 언팩킹(Unpacking)
튜플에는 언팩킹(Unpacking) 이라는 꽤 유용한 기능이 있습니다. 튜플의 각 요소를 별도의 변수에 한 번에 할당할 수 있습니다.
person = ("John", 32, 175.5)
name, age, height = person
print(name) # "John"
print(age) # 32
print(height) # 175.5
위 예시에서 튜플 person의 각 요소가 name, age, height 변수에 차례로 할당되었습니다. 이를 언팩킹이라고 합니다.
언팩킹 시 왼쪽 변수 개수와 오른쪽 튜플 요소 개수가 같아야 합니다. 그렇지 않으면 오류가 발생합니다. 하지만 다음과 같이 별표(*)를 사용하면 남는 요소를 리스트로 받을 수 있습니다.
nums = (1, 2, 3, 4, 5)
a, b, *rest = nums
print(a, b) # 1 2
print(rest) # [3, 4, 5]
*rest에 의해 3, 4, 5가 리스트 형태로 담겼습니다. 유용한 기능이므로 꼭 기억해두시기 바랍니다.
튜플 관련 메서드와 연산
튜플도 다른 시퀀스 자료형과 마찬가지로 인덱싱, 슬라이싱, 연결, 길이 등의 연산이 가능합니다.
point = (3, 4)
print(point[0]) # 3 (인덱싱)
print(point[:1]) # (3,) (슬라이싱)
colors = ("red", "green", "blue")
print(len(colors)) # 3 (길이)
rgb = (255, 128, 0)
print(rgb * 2) # (255, 128, 0, 255, 128, 0) (곱셈 연산은 반복)
tup1 = (1, 2, 3)
tup2 = (4, 5, 6)
tup3 = tup1 + tup2 # (1, 2, 3, 4, 5, 6) (튜플 연결)
또한 튜플에서 사용할 수 있는 메서드도 있습니다.
- count(x): 튜플에서 x의 개수를 반환합니다.
- index(x): 튜플에서 x의 인덱스 위치를 반환합니다.
fruits = ("apple", "banana", "orange", "banana")
print(fruits.count("banana")) # 2
print(fruits.index("orange")) # 2
튜플에서 값을 변경할 수는 없지만, 위와 같은 연산과 메서드를 통해 다양한 활용이 가능합니다.
튜플 주요 활용 사례
튜플은 어디에서 주로 활용될까요? 간단히 알아보겠습니다.
1. 리스트의 값 순회
리스트에 있는 각 항목을 튜플 언팩킹으로 쉽게 풀어낼 수 있습니다.
students = [
("John", 22, "Economics"),
("Emily", 20, "Civil Engineering"),
("Michael", 24, "Philosophy")
]
for name, age, major in students:
print(f"{name} ({age}) is studying {major}.")
2. 함수 반환값으로 여러 개의 값 전달
튜플을 반환하여 한 번에 여러 개의 값을 전달할 수 있습니다.
def calculate(x, y):
total = x + y
diff = x - y
return total, diff # 튜플 반환
total, diff = calculate(10, 4)
print(total) # 14
print(diff) # 6
3. 딕셔너리 키로 사용
불변 순차 자료형이므로 딕셔너리의 키로 사용할 수 있습니다.
person = ("John", 32)
info = { person: (175.5, 85.2) }
print(info[("John", 32)]) # (175.5, 85.2)
4. 각종 데이터 구조의 구현
튜플은 정적 배열, 기록 구조(레코드), 데이터 구조 등의 구현에 활용됩니다.
# 정적 배열
arr = ('apple', 'banana', 'orange') * 3
print(arr)
# 기록 구조
StudentRecord = collections.namedtuple('StudentRecord', 'id, name, grade')
record1 = StudentRecord(1, 'John', 4.0)
이처럼 다양한 상황에서 튜플이 유용하게 활용될 수 있습니다. 튜플의 특성을 잘 이해하고 계셨다면, 파이썬 프로그래밍의 많은 부분에서 튜플을 활용할 수 있을 것입니다.
팁과 실전 예제
여기서 튜플을 더 효과적으로 사용하기 위한 팁과 실전 예제를 알아보겠습니다.
1) 가독성을 위해 괄호 사용
한 줄에 길게 늘어선 튜플은 가독성이 떨어집니다. 이럴 때는 괄호로 열고 닫아 항목 구분을 명확히 해줍니다.
# 가독성 낮음
rgb = 255, 128, 0, 192, 64, 0, 128, 0, 0
# 가독성 높음
rgb = (255, 128, 0,
192, 64, 0,
128, 0, 0)
2) 튜플을 딕셔너리의 키로 활용하기
튜플은 불변 객체이므로 딕셔너리의 키로 사용할 수 있습니다. 리스트는 변경이 가능해 키로 사용할 수 없습니다.
product = ("Apple", 2023, "iMac")
stock = {
product: 500
}
print(stock[("Apple", 2023, "iMac")]) # 500
3) 대화형 입력으로 튜플 만들기
사용자에게 여러 값을 입력받아 튜플로 만들 수 있습니다.
values = tuple(int(x) for x in input("숫자들을 입력하세요: ").split())
print(values)
위 코드에서 input()으로 입력된 문자열을 split()으로 분리하고, 각 항목을 int()로 정수화하여 튜플로 만듭니다.
4) 실전 예제: 좌표 계산기
튜플의 활용을 보여주는 실전 예제입니다. 두 점의 좌표를 튜플로 받아 거리를 계산합니다.
import math
def calc_distance(p1, p2):
x1, y1 = p1
x2, y2 = p2
return math.sqrt((x2 - x1)**2 + (y2 - y1)**2)
point1 = (3, 4)
point2 = (0, 0)
distance = calc_distance(point1, point2)
print(f"두 점 ({point1}, {point2})간 거리는 {distance:.2f}입니다.")
위 예제에서 calc_distance() 함수는 튜플 언팩킹으로 각 점의 x, y 좌표를 받아 거리를 계산합니다. 이렇게 튜플은 실용적인 상황에서 다방면으로 활용될 수 있습니다.
이번 내용을 통해 파이썬 튜플의 개념과 활용법을 충분히 이해하셨기를 바랍니다. 여전히 궁금한 점이 있다면 언제든 질문해주시기 바랍니다.
참고 자료
[1] 박응용 박사, "혼자 공부하는 파이썬"
[2] Python Software Foundation, "파이썬 튜플 문서"
[3] Eric Matthes, "Python Crash Course" [4] Jose Portilla, "Python for Data Structures, Algorithms, and Interviews"
한 고대 문서 이야기
여기 한 고대 문서가 있습니다. 이 문서는 B.C. 1,500년 부터 A.D 100년까지 약 1,600 여 년 동안 기록되었습니다. 이 문서의 저자는 약 40 명입니다. 이 문서의 고대 사본은 25,000 개가 넘으나, 사본간 오
gospel79.tistory.com
유튜브 프리미엄 월 1만원 할인받고 월 4000원에 이용하는 방법
올해 5월부터 월 8000원 정도이던 유튜브 프리미엄 요금이 15000원 정도로 인상됩니다. 각종 OTT 서비스, ChatGPT 같은 서비스들이 늘어나다보니 이런 거 몇 개만 이용하더라도 월 이용요금이 5만원을
stock79.tistory.com
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
'IT > 파이썬 기초 완전 정복' 카테고리의 다른 글
파이썬 딕셔너리 자료구조 익히기 (12) (3) | 2024.04.20 |
---|---|
파이썬 리스트 자료구조 다루기 (10) (1) | 2024.04.20 |
파이썬 예외 처리(try, except) 방법 (9) (1) | 2024.04.20 |
파이썬 파일 입출력 다루기 (8) (1) | 2024.04.20 |
파이썬 모듈과 패키지 import 하기 (7) (0) | 2024.04.20 |
댓글