2-1. 파이썬의 튜플(Tuple):패킹,언패킹,비교,슬라이싱,삭제, 활용, 함수

파이썬의 튜플은 리스트 자료형과 거의 비슷하지만 리스트와 다르게 요소의 값을 변경 할 수 없습니다. 튜플 자료형의 생성, 패킹 및 언패킹, 튜플간의 비교, 튜플 자르고, 삭제하고, 딕셔너리에서의 튜플의 활용, 튜플의 내장함수등을 알아보겠습니다.

튜플의 생성

튜플은 여러가지 방법(모양)으로 생성이 가능합니다.

tu1 = ()
tu2 = (1,)
tu3 = (1, 2, 3)
tu4 = 1, 2, 3
tu5 = ('a', 'b', ('ab', 'cd'))

튜플의 모습은 리스트와 비슷하지만 리스트는 “[ ]”로 둘러싸지만 튜플은 “( )”로 둘러쌉니다. 하지만 tu4 처럼 “( )”을 생략도 가능합니다. 만약 튜플에 요소가 1개 밖에 없다면 tu2에서처럼 첫번째 요소 뒤에 “,”를 반드시 입력해 주어야 합니다.

튜플과 리스트의 가장큰 차이점은 요소의 변경 가능여부 입니다. 리스트는 자유롭게 요소를 추가, 삭제, 변경이 가능하지만 튜플의 경우엔 그렇지 않습니다. 이러한 차이점 때문에 파이썬 프로그래밍을 할때 구분해서 사용해 주는것이 좋습니다. 프로그램이 실행되는 동안 요소가 변경되는걸 바라지 않을 경우엔 리스트보다 튜플을 사용하는것이 정신건강에 이롭습니다.

파이썬의 튜플 할당

파이썬에서 튜플 할당은 매우 유용한 기능입니다. 튜플 할당을 사용하면 여러 변수에 동시에 값을 할당할 수 있습니다. 이는 코드를 간결하게 만들고, 변수 간의 값을 교환하는 등의 작업을 쉽게 할 수 있습니다.

다음은 튜플 할당의 기본적인 사용 방법입니다

# 튜플 할당
a, b = 1, 2
print(a)  # 출력: 1
print(b)  # 출력: 2

위의 코드에서 a, b = 1, 2는 튜플 할당을 사용한 예입니다. 이 코드는 a에 1을, b에 2를 할당합니다.

튜플 할당은 변수의 값을 교환하는 데도 사용할 수 있습니다. 다음은 그 예시입니다.

# 변수 값 교환
a, b = b, a
print(a)  # 출력: 2
print(b)  # 출력: 1

위의 코드에서 a, b = b, a는 a와 b의 값을 교환합니다. 이 코드는 추가 변수 없이 두 변수의 값을 교환하는 가장 간단한 방법입니다.

패킹(Packing) & 언패킹(Unpacking)

패킹에서는 값을 새로운 튜플에 넣을때 사용하고, 언패킹은 해당 값을 다시 변수로 추출합니다.

파이썬에서 튜플 패킹(tuple packing)과 언패킹(tuple unpacking)은 코드를 간결하게 작성하는 데 매우 유용한 기능입니다. 튜플 패킹은 여러 개의 값을 하나의 튜플로 묶는 것을 말합니다. 예를 들어, 다음과 같이 여러 개의 값을 하나의 튜플로 묶을 수 있습니다.

# 튜플 패킹
my_tuple = 1, 2, 3
print(my_tuple)  # 출력: (1, 2, 3)

위의 코드에서 my_tuple = 1, 2, 3는 튜플 패킹을 사용한 예입니다. 이 코드는 123 세 개의 값을 하나의 튜플 my_tuple로 묶습니다.

반면에, 튜플 언패킹은 튜플의 각 요소를 여러 개의 변수에 할당하는 것을 말합니다. 예를 들어, 다음과 같이 튜플의 각 요소를 여러 개의 변수에 할당할 수 있습니다.

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

위의 코드에서 a, b, c = my_tuple는 튜플 언패킹을 사용한 예입니다. 이 코드는 튜플 my_tuple의 각 요소를 변수 abc에 각각 할당합니다.

이처럼 튜플 패킹과 언패킹은 파이썬에서 코드를 간결하고 이해하기 쉽게 만드는 데 도움이 됩니다.

튜플의 비교

파이썬의 비교 연잔사는 튜플간의 비교에서도 사용 할 수 있습니다. 튜플의 비교는 첫번째 요소끼리의 비교에서 시작이 됩니다.

첫번째 요소가 큰 튜플이 큰 값입니다. 만약 첫번째가 같다면 두번째 요소들끼리 비교를 합니다. 계속해서 동일한 값을 가졌다면 계속해서 다음 요소를 비교해 나갑니다.

첫 번째 요소가 다른 경우:

tuple1 = (1, 2, 3)
tuple2 = (2, 2, 3)

print(tuple1 < tuple2)  # 출력: True

위의 코드에서 tuple1의 첫 번째 요소 1은 tuple2의 첫 번째 요소 2보다 작으므로, tuple1은 tuple2보다 작다고 판단됩니다.

첫 번째 요소가 같고, 두 번째 요소가 다른 경우:

tuple1 = (1, 2, 3)
tuple2 = (1, 3, 3)

print(tuple1 < tuple2)  # 출력: True

위의 코드에서 첫 번째 요소는 동일하므로, 두 번째 요소를 비교합니다. tuple1의 두 번째 요소 2는 tuple2의 두 번째 요소 3보다 작으므로, tuple1은 tuple2보다 작다고 판단됩니다.

모든 요소가 같은 경우:

tuple1 = (1, 2, 3)
tuple2 = (1, 2, 3)

print(tuple1 == tuple2)  # 출력: True

위의 코드에서 모든 요소가 동일하므로, tuple1과 tuple2는 같다고 판단됩니다.

이처럼 튜플 간의 비교는 각 요소를 순서대로 비교하여 결정됩니다. 이를 이해하면 튜플을 사용하는 다양한 상황에서 효율적인 코드를 작성할 수 있습니다.

딕셔너리 자료형에서 튜플을 키로 사용하기

파이썬의 딕셔너리(dictionary)는 키(key)와 값(value)의 쌍을 저장하는 자료형입니다. 딕셔너리의 키로는 변경 불가능한(immutable) 자료형을 사용할 수 있습니다. 튜플(tuple)은 변경 불가능한 자료형이므로 딕셔너리의 키로 사용할 수 있습니다.

다음은 튜플을 키로 사용하는 딕셔너리의 예시입니다:

# 튜플을 키로 사용하는 딕셔너리
my_dict = {(1, 2): 'a', (3, 4): 'b', (5, 6): 'c'}

print(my_dict[(1, 2)])  # 출력: 'a'
print(my_dict[(3, 4)])  # 출력: 'b'
print(my_dict[(5, 6)])  # 출력: 'c'

위의 코드에서 (1, 2)(3, 4)(5, 6)은 튜플이며, 이들을 딕셔너리 my_dict의 키로 사용하였습니다. 이렇게 튜플을 키로 사용하면, 여러 개의 값을 하나의 키로 묶어서 사용할 수 있습니다. 이는 다차원 배열의 인덱스를 키로 사용하거나, 여러 개의 값을 동시에 조회해야 하는 등의 상황에서 유용합니다.

딕셔너리의 키로 튜플을 사용할 때는 튜플의 요소가 변경 불가능한 자료형이어야 한다는 점을 주의해야 합니다. 예를 들어, 리스트(list)는 변경 가능한(mutable) 자료형이므로 튜플의 요소나 딕셔너리의 키로 사용할 수 없습니다. 따라서 튜플을 딕셔너리의 키로 사용할 때는 튜플의 요소가 변경 불가능한 자료형인지 확인해야 합니다.

이처럼 튜플을 딕셔너리의 키로 사용하면, 파이썬 코드를 더 유연하고 효율적으로 작성할 수 있습니다.

파이썬의 튜플의 삭제

튜플은 Python에서 불변(immutable) 타입이므로 튜플의 요소를 직접 삭제할 수는 없습니다. 하지만 튜플 전체를 삭제하거나, 튜플을 다른 튜플로 대체하는 것은 가능합니다.

튜플 전체를 삭제하려면 del 키워드를 사용하면 됩니다. 예를 들어, 다음과 같이 튜플을 삭제할 수 있습니다:

my_tuple = (1, 2, 3)
del my_tuple

튜플의 특정 요소를 “삭제”하려면, 해당 요소를 제외한 새로운 튜플을 만들어야 합니다. 예를 들어, 다음과 같이 튜플의 첫 번째 요소를 “삭제”할 수 있습니다:

my_tuple = (1, 2, 3)
my_tuple = my_tuple[1:]

이 경우, my_tuple은 이제 (2, 3)이 됩니다. 원래의 튜플 (1, 2, 3)은 변경되지 않았지만, my_tuple 변수는 이제 새로운 튜플을 참조하게 됩니다. 이 방법을 사용하면 튜플의 특정 요소를 “삭제”하는 것과 같은 효과를 얻을 수 있습니다. 이것이 Python에서 튜플을 다루는 방법 중 하나입니다. 튜플은 불변성을 유지하기 위해 이런 식으로 작동합니다. 

튜플의 슬라이싱

파이썬에서 튜플은 변경 불가능한 순서가 있는 요소의 모음입니다. 튜플 슬라이싱은 튜플의 일부분을 선택하는 것을 의미합니다. 슬라이싱은 시작 인덱스와 종료 인덱스를 사용하여 특정 범위의 요소를 선택합니다.

예를 들어, 다음과 같은 튜플이 있다고 가정해봅시다:

my_tuple = ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h')

이 튜플에서 첫 번째부터 네 번째 요소까지를 선택하려면 다음과 같이 슬라이싱을 사용할 수 있습니다:

sliced_tuple = my_tuple[0:4]
print(sliced_tuple)  # 출력: ('a', 'b', 'c', 'd')

위의 코드에서 0:4는 인덱스 0부터 인덱스 4 이전까지의 요소를 선택하라는 의미입니다. 파이썬의 인덱스는 0부터 시작하므로, 첫 번째 요소는 인덱스 0에 위치하고 있습니다.

또한, 슬라이싱에서 시작 인덱스나 종료 인덱스를 생략할 수도 있습니다. 시작 인덱스를 생략하면 슬라이싱은 튜플의 처음부터 시작하고, 종료 인덱스를 생략하면 튜플의 끝까지 선택합니다. 예를 들어, 다음과 같이 튜플의 처음부터 네 번째 요소까지를 선택할 수 있습니다:

sliced_tuple = my_tuple[:4]
print(sliced_tuple)  # 출력: ('a', 'b', 'c', 'd')

이와 같이 튜플 슬라이싱을 사용하면 튜플의 일부분을 효과적으로 선택할 수 있습니다. 이는 데이터 처리나 분석 작업에서 매우 유용하게 사용됩니다.

튜플의 내장함수

파이썬의 튜플(tuple)에는 두 가지 주요 내장 함수가 있습니다: count()와 index()입니다.

  1. count(): 이 함수는 튜플 내에서 특정 요소의 개수를 반환합니다. 예를 들어, 다음과 같이 사용할 수 있습니다:
my_tuple = (1, 2, 2, 3, 3, 3)
print(my_tuple.count(2))  # 출력: 2

위의 코드에서 my_tuple.count(2)는 my_tuple 내에서 2의 개수를 반환합니다.

  1. index(): 이 함수는 튜플 내에서 특정 요소의 첫 번째 인덱스를 반환합니다. 만약 그 요소가 튜플 내에 없다면, 에러를 발생시킵니다. 예를 들어, 다음과 같이 사용할 수 있습니다:
my_tuple = (1, 2, 2, 3, 3, 3)
print(my_tuple.index(2))  # 출력: 1

위의 코드에서 my_tuple.index(2)는 my_tuple 내에서 2의 첫 번째 인덱스를 반환합니다.

이 두 함수는 튜플을 다루는 데 매우 유용합니다. 하지만 튜플은 변경 불가능한 자료형이므로, 리스트에 있는 append()remove() 등과 같은 함수는 튜플에는 존재하지 않습니다. 이 점을 유의해야 합니다. 

이외에도 all(), any(), enumerate(), max(), min(), sorted(), len(), tuple() 와 같은 내장함수를 가지고 있습니다.

리스트 vs 튜플 : 어떤것이 좋은가?

튜플(tuple)과 리스트(list)는 Python에서 사용하는 두 가지 주요 데이터 구조입니다. 둘 다 여러 항목을 저장할 수 있지만, 튜플이 리스트보다 몇 가지 장점이 있습니다.

  1. 불변성: 튜플은 불변(immutable)입니다. 즉, 한 번 생성된 튜플은 변경할 수 없습니다. 이러한 불변성은 코드의 안정성을 높이고 버그를 줄일 수 있습니다.
  2. 해시 가능성: 튜플은 변경할 수 없으므로 해시 가능(hashable)합니다. 따라서 튜플은 딕셔너리의 키로 사용할 수 있습니다.
  3. 공간 효율성: 튜플은 리스트에 비해 더 적은 양의 메모리를 사용합니다. 따라서 큰 데이터 세트를 다룰 때 튜플을 사용하면 메모리를 절약할 수 있습니다.
  4. 실행 시간: 튜플이 리스트보다 더 빠르게 실행됩니다. 따라서 성능이 중요한 경우 튜플을 사용하는 것이 좋습니다.

그러나 이러한 장점에도 불구하고, 튜플이 항상 리스트보다 나은 것은 아닙니다. 리스트는 가변성(mutable)을 가지므로 데이터를 동적으로 변경해야 하는 경우에는 리스트가 더 적합할 수 있습니다. 따라서 사용 사례에 따라 적절한 데이터 구조를 선택하는 것이 중요합니다.

1 thought on “2-1. 파이썬의 튜플(Tuple):패킹,언패킹,비교,슬라이싱,삭제, 활용, 함수”

Leave a Comment