오늘은 꼭 알아야 하는 파이썬 데이터 타입 중 하나인 튜플(Tuple)에 대해서 알아보겠습니다. 튜플은 순서가 있고, 변경이 불가능한(immutable) 엘리먼트들의 집합체입니다. 튜플을 어떻게 사용하는지 코드 예제와 함께 자세히 알아보겠습니다. 또 비슷한 리스트와는 어떤 차이가 있는지 살펴보겠습니다.
파이썬 튜플(Tuple) 생성하는 방법
1. 비어있는 튜플(Tuple) 만드는 방법
튜플을 상징하는 둥근 괄호 ()를 이용하여 엘리먼트가 없는 튜플 타입의 변수를 선언할 수 있습니다.
empty_tuple = ()
2. 하나의 엘리먼트만 가지는 튜플 만드는 방법
엘리먼트를 하나만 가지는 튜플을 만드는 방법은 둥근 괄호 안에 엘리먼트를 입력하고 쉼표를 찍어줌으로써 만들 수 있습니다.
single_element_tuple = (1,)
3. 여러개의 엘리먼트를 가지는 튜플 만드는 방법
여러 개의 엘리먼트를 가지는 튜플을 만드는 방법은 둥근 괄호 안에 엘리먼트 사이를 쉼표로 구분해 줌으로써 만들 수 있습니다.
my_tuple = (1, "hello", 3.5)
4. 괄호( ) 없이 튜플 만드는 방법
튜플은 둥근 괄호를 명시해주지 않고 엘리먼트들 사이에 쉼표로만 구분해서 적어줘도 생성할 수 있습니다.
my_tuple = 1, 2, "hello"
print(my_tuple) # Output: (1, 2, "hello")
아래 코드는 튜플 안에 각 엘리먼트를 값으로 가지는 여러개의 변수를 한 번에 생성하는 방법을 보여주는 코드입니다.
my_tuple = 1, 2, "hello"
a, b, c = my_tuple
print(a) # Output: 1
print(b) # Output: 2
print(c) # Output: "hello"
튜플 인덱싱과 슬라이싱 (Tuple Indexing and Slicing)
튜플을 생성하고 나서 튜플의 위치(Index, 인덱스)로 튜플의 각 엘리먼트를 접근할 수 있고, 또 부분을 잘라내는 슬라이싱을 할 수 있습니다.
튜플 인덱싱(Tuple Indexing)
리스트와 마찬가지로 [ ] 괄호 안에 튜플의 엘리먼트 위치(Index, 인덱스)를 넣어줌으로써 튜플의 각 엘리먼트에 접근할 수 있습니다. 가장 처음 엘리먼트는 0의 인덱스를 가집니다. 아래 코드 예시를 같이 살펴보시죠.
my_tuple = (1, "hello", 3.5)
print(my_tuple[0]) # Output: 1
print(my_tuple[1]) # Output: "hello"
print(my_tuple[2]) # Output: 3.5
튜플 슬라이싱(Tuple Slicing)
튜플 슬라이싱은 [앞 숫자 : 뒷 숫자] 를 이용하여 할 수 있습니다. 앞에 숫자가 가리키는 엘리먼트부터 뒤에 숫자-1이 가리키는 엘리먼트까지 부분을 잘라내는 것입니다. 여기서 주의할 점은 앞에 숫자가 가리키는 엘리먼트는 포함이 되고(inclusive) 뒤에 숫자가 가리키는 엘리먼트는 포함이 되지 않는다는(exclusive) 점입니다. [1:4]라고 기재해 주면 인덱스 1이 가지는 엘리먼트부터~인덱스 3이 가지는 엘리먼트까지가 포함됩니다.
앞에 숫자를 비워두게 되면 인덱스 0부터 시작하겠다는 뜻이며 뒤에 숫자를 비워두게되면 끝까지 모두 포함하겠다는 뜻입니다. 하나하나 이해하기 위해 아래 예시를 같이 살펴보겠습니다.
my_tuple = (1, "hello", 3.5, 7, 9, "world")
print(my_tuple[1:4]) # Output: ("hello", 3.5, 7)
print(my_tuple[:3]) # Output: (1, "hello", 3.5)
print(my_tuple[3:]) # Output: (7, 9, "world")
네스티드 튜플(Nested Tuple)
네스티드 튜플(Nested Tuple)은 튜플안에 또 튜플이 있는 모양의 튜플을 뜻합니다. 아래 예시를 살펴보겠습니다. my_tuple이라는 튜플의 인덱스 2 엘리먼트는 (3.5, 7)의 또 다른 튜플입니다. 여기서 튜플 안의 튜플 안의 특정 엘리먼트를 접근하려면 [ ] 괄호를 두 번 기재함으로써 접근할 수 있습니다. 이해를 돕기 위해 아래 예시를 같이 살펴보겠습니다. my_tuple[2][0]으로 표시함으로써 my_tuple안의 3.5를 가져오는 것을 볼 수 있습니다.
my_tuple = (1, "hello", (3.5, 7), 9, "world")
print(my_tuple[2]) # Output: (3.5, 7)
print(my_tuple[2][0]) # Output: 3.5
튜플의 불변성(Immutability of Tuple)
튜플이 불변(immutable)하다는 건 정확히 이해하고 넘어가야하기 때문에 별도의 섹션을 빼서 설명드리고자 합니다. 불변(immutable)하다는 것은 한번 생성이 되면 그 내용을 변경할 수가 없다는 뜻입니다. 아래의 코드 예시를 같이 보겠습니다.
my_tuple = (1, 2, 3)
my_tuple[1] = 5 # 이렇게 엘리먼트 변경을 시도하면 에러가 납니다.
리스트에서는 가능했던 엘리먼트 변경이 튜플에서는 불가능합니다. 변경을 시도하면 위와 같이 에러가 나면서 실행되지 않습니다.
파이썬 튜플의 기본 메소드(Method)
1. count() : 특정 값을 가지는 엘리먼트의 개수를 리턴해주는 메소드입니다. 아래 예제는 튜플 안에서 2가 몇개있는지 세어보는 코드입니다.
my_tuple = (1, 2, 3, 2, 4, 2)
count = my_tuple.count(2)
print(count) # output: 3
2. index() : 특정 값을 가지는 엘리먼트의 인덱스 값을 리턴하는 메소드입니다. 해당 값을 가지는 엘리먼트 중 가장 처음 만난 엘리먼트의 인덱스 값을 리턴합니다.
my_tuple = (1, 2, 3, 2, 4, 2)
index = my_tuple.index(2)
print(index) # output: 1
3. len() : 튜플 안에 몇 개의 엘리먼트가 있는지 길이를 계산하는 메소드입니다.
my_tuple = (1, 2, 3, 4, 5)
length = len(my_tuple)
print(length) # output: 5
4. sorted() : 튜플 안의 엘리먼트를 정렬하여 리스트로 리턴해주는 메소드입니다.
my_tuple = (4, 1, 5, 2, 3)
sorted_tuple = sorted(my_tuple)
print(sorted_tuple) # output: [1, 2, 3, 4, 5]
정렬한 것을 다시 튜플에 넣어주기 위해서는 아래와 같이 튜플로 한번 더 변환해줘야 합니다.
my_tuple = (4, 1, 5, 2, 3)
sorted_tuple = tuple(sorted(my_tuple))
print(sorted_tuple) # output: (1, 2, 3, 4, 5)
튜플의 연산자(Tuple Operation)
1. Concatenate: + 연산자를 사용하여 튜플 여러 개를 합칠 수 있습니다.
tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
tuple3 = tuple1 + tuple2
print(tuple3) #(1, 2, 3, 4, 5, 6)
2. Multiply: * 연산자를 사용하여 튜플을 여러 번 반복시킬 수 있습니다.
tuple1 = (1, 2)
tuple2 = tuple1 * 3
print(tuple2) #(1, 2, 1, 2, 1, 2)
튜플과 리스트 간 데이터타입 변환하기
튜플과 리스트는 여러 엘리먼트를 하나의 변수에 저장하는 점에서 비슷하다고 볼 수 있습니다. 프로그래밍을 하다 보면 튜플을 리스트로, 리스트를 튜플로 변환하여 사용해야 할 때가 있는데 각각 어떻게 변환할 수 있는지 알아보겠습니다.
1. 튜플을 리스트로 변환하기 (tuple -> list)
list()로 묶어줌으로써 튜플을 리스트로 변환할 수 있습니다.
my_tuple = (1, 2, 3)
my_list = list(my_tuple)
print(my_list) # Output: [1, 2, 3]
또 다른 방법은 아래와 같이 for loop 안에서 리스트에 엘리먼트를 하나하나 append 해주는 방식이 있습니다.
my_tuple = (1, 2, 3)
my_list = []
for i in my_tuple:
my_list.append(i)
print(my_list) # Output: [1, 2, 3]
2. 리스트를 튜플로 변환하기 (list -> tuple)
반대로 리스트를 튜플로 변환할 때는 tuple()로 묶어줌으로써 변환할 수 있습니다.
my_list = [1, 2, 3]
my_tuple = tuple(my_list)
print(my_tuple) # Output: (1, 2, 3)
마찬가지로 for loop을 이용하여 += (i, )로 튜플에 엘리먼트를 하나하나 넣어줄 수 있습니다.
my_list = [1, 2, 3]
my_tuple = ()
for i in my_list:
my_tuple += (i,)
print(my_tuple) # Output: (1, 2, 3)
Summary
핵심내용을 한번 더 정리하겠습니다.
- 튜플은 immutable 한 순서가 있는 엘리먼트들의 집합체이다.
- 튜플은 ()와 , 또는 tuple()로 생성할 수 있다.
- 튜플은 indexing과 slicing을 할 수 있고 nested tuple 형태로도 쓸 수 있다.
- 튜플은 count(), index(), len(), sorted() 같은 메소드를 사용할 수 있다.
- 튜플은 concatenate(+), multiply(*) 할 수 있다.
- 튜플 <-> 리스트는 서로 변환할 수 있다.
마지막으로 튜플은 불변(immutable)하는 특성 때문에, 변하면 안 되는 곳에 자주 사용됩니다. 예를 들면, 딕셔너리의 key 값 같은 경우가 해당됩니다. 오늘 파이썬 데이터타입의 핵심 타입 중 하나인 튜플에 대해 개념부터 특성과 메소드, 연산자를 어떻게 활용하는지 알아보았습니다. 파이썬 데이터타입 튜플에 대해 이해하는데 도움이 되셨길 바랍니다.
<참고하면 좋을 포스팅>
'파이썬 독학' 카테고리의 다른 글
[파이썬 프로그래밍] 파이썬이란? 파이썬을 배워야하는 이유, 설치 방법 (0) | 2023.03.26 |
---|---|
[파이썬 독학] 데이터 타입 리스트(List)의 모든 것 (1) | 2023.02.28 |
[파이썬 독학 기초] Python 변수와 데이터 타입 제대로 이해하기 (0) | 2023.02.27 |
파이썬 Seaborn 마스터 하기 (0) | 2023.02.20 |
파이썬 넘파이 Numpy 사용법 가이드 (0) | 2023.02.20 |
댓글