본문 바로가기
IT/파이썬 기초 완전 정복

파이썬 튜플 활용법 배우기 (11)

by 지식 발전소 2024. 4. 20.
728x90
반응형

 

튜플이란?

 

 

안녕하세요. 이번에는 파이썬 튜플(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

 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

728x90
반응형

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

댓글