튜플

CHOJUNGHO96·2023년 11월 13일
0

파이썬

목록 보기
3/5

튜플은 단순한 불변 리스트가 아니다.

튜플(tuple)은 불변 리스트(immutable list)로 간주될 수 있지만, 그보다 더 많은 역할을 합니다. 튜플은 불변성을 갖는다는 점에서 리스트와 다르며, 이는 튜플이 한 번 생성되면 그 내용을 변경할 수 없음을 의미합니다. 튜플은 다양한 타입의 객체들을 그룹화하는 데 사용할 수 있으며, 이 특성 때문에 파이썬에서 다목적으로 널리 사용됩니다.

예제코드

# 튜플 생성
my_tuple = (1, "Hello", 3.14)
print(my_tuple)  # 출력: (1, 'Hello', 3.14)

# 불변성 확인
try:
    my_tuple[0] = 100
except TypeError:
    print("Cannot modify a tuple!")  # 출력: Cannot modify a tuple!

레코드로서의 튜플

튜플은 서로 다른 데이터 타입의 요소들을 담을 수 있기 때문에, 종종 복잡한 데이터 구조의 레코드로 사용됩니다. 각 튜플의 위치는 의미를 갖게 되며, 각 위치에 있는 요소는 레코드의 다른 필드를 나타냅니다. 이러한 특성은 튜플을 다양한 데이터 항목을 하나의 단위로 취급할 때 유용하게 만듭니다.

예제코드

# 레코드로서의 튜플 사용
employee = ("John Doe", "Engineer", 30)
name, position, age = employee
print(f"Name: {name}, Position: {position}, Age: {age}")
# 출력: Name: John Doe, Position: Engineer, Age: 30

튜플 언패킹

튜플 언패킹은 튜플의 각 요소를 여러 변수에 할당하는 과정입니다. 파이썬은 병렬 할당을 지원하여, 튜플의 각 요소를 한 번에 여러 변수에 할당할 수 있습니다. 또한, * 연산자를 사용하여 튜플의 일부 요소만 선택적으로 언패킹할 수 있습니다.

예제코드

# 튜플 언패킹
a, b, c = (1, 2, 3)
print(a, b, c)  # 출력: 1 2 3

# * 사용 예제
first, *rest = (1, 2, 3, 4, 5)
print(first)  # 출력: 1
print(rest)   # 출력: [2, 3, 4, 5]

내포된 튜플 언패킹

내포된 튜플 언패킹은 중첩된 튜플 구조에서도 언패킹을 수행할 수 있습니다. 이 기능은 복잡한 데이터 구조에서 원하는 요소를 쉽게 추출할 수 있게 해줍니다.

예제코드

# 내포된 튜플 언패킹
outer = (1, (2, 3), 4)
a, (b, c), d = outer
print(a, b, c, d)  # 출력: 1 2 3 4

# 도시 정보를 담은 내포된 튜플
city_info = ("New York", (40.7128, -74.0060), "USA", ("Central Park", "Times Square"))

# 내포된 튜플 언패킹
city_name, (latitude, longitude), country, (landmark1, landmark2) = city_info

print(f"City: {city_name}, Country: {country}")
print(f"Coordinates: {latitude}, {longitude}")
print(f"Popular Landmarks: {landmark1}, {landmark2}")

명명된 튜플

collections.namedtuple() 함수는 튜플의 각 요소에 이름을 붙여줍니다. 이를 통해 튜플 요소에 인덱스가 아닌 이름으로 접근할 수 있으며, 코드의 가독성과 유지 보수성을 크게 향상시킵니다. 명명된 튜플은 _fields, _make, _asdict 같은 유용한 메서드와 속성을 제공합니다.

예제코드

from collections import namedtuple

# 명명된 튜플 정의: 도서 정보
Book = namedtuple('Book', 'title author year')

# 책 인스턴스 생성
book1 = Book(title="1984", author="George Orwell", year=1949)
book2 = Book._make(["Animal Farm", "George Orwell", 1945])

# 접근 및 사용
print(book1)           # 출력: Book(title='1984', author='George Orwell', year=1949)
print(book2._asdict()) # 출력: OrderedDict([('title', 'Animal Farm'), ('author', 'George Orwell'), ('year', 1945)])

# 튜플 수정
book1_updated = book1._replace(year=1984)
print(book1_updated)   # 출력: Book(title='1984', author='George Orwell', year=1984)

불변 리스트로서의 튜플

튜플은 불변 리스트라고 생각할 수 있으며, 이는 튜플의 내용을 변경할 수 없음을 의미합니다. 그러나 튜플은 몇 가지 유용한 메서드를 가지고 있습니다. count() 메서드는 특정 요소가 튜플에 몇 번 등장하는지를 반환하고, index() 메서드는 특정 요소의 인덱스를 반환합니다. 이는 리스트에도 동일하게 적용되는 메서드들입니다.

메서드리스트(List)튜플(Tuple)설명
appendOX요소를 리스트 끝에 추가합니다.
extendOX리스트를 연장합니다.
insertOX지정한 위치에 요소를 삽입합니다.
removeOX첫 번째로 나타나는 특정 요소를 제거합니다.
popOX지정된 위치의 요소를 제거하고, 그 요소를 반환합니다.
clearOX리스트의 모든 요소를 제거합니다.
indexOO지정된 요소의 위치를 반환합니다.
countOO특정 요소가 몇 번 나타나는지 계산합니다.
sortOX리스트의 요소를 정렬합니다.
reverseOX리스트의 요소 순서를 뒤집습니다.
copyOX리스트의 얕은 복사본을 만듭니다.

예제코드

# 튜플 메서드 예제
t = (1, 2, 3, 2, 4, 2)
print(t.count(2))  # 2의 개수를 출력: 3
print(t.index(3))  # 3의 인덱스를 출력: 2
profile
백엔드개발자

0개의 댓글