상세 컨텐츠

본문 제목

파이썬 - 튜플(tuple) 자료형

프로그래밍 언어/파이썬

by 별을 보는 사람 2021. 2. 9. 21:22

본문

반응형

튜플

튜플(tuple)은 정렬과 변경 불가능(immutable)의 객체들의 집합입니다. 튜플은 리스트와 유사하지만 요소들의 생성, 수정, 삭제가 불가능하다. 그리고 () 및 ', ' 을 사용하여 값들을 구분한다.

 

예) my_tuple = ("Max", 20, "New York")

 

Tuple과 List 비교

  • 보통 튜플은 서로다른 데이터 유형을 값으로 가지며, 리스트는 같은 데이터 형식을 값으로 가진다.
  • 튜플은 값을 변경하지 못하기 때문에 리스트에 비해 반복문 실행 시 속도가 빠르다.
  • 튜플의 값들은 변경이 불가능하기(immutable) 때문에 딕셔너리의 키값으로 쓰인다. 리스트의 값들은 변경 가능하기(mutable) 때문에 딕셔너리의 키값으로 사용할 수 없다.
  • 값이 변경되면 안되는 데이터들을 관리할 경우 튜플을 사용하여 변경을 방지할 수 있다.

 

튜플의 생성

튜플은 괄호 및 쉼표을 이용하여 생성할 수 있다. 혹은 튜플에 내장되어 있는 기능을 이용하여 생성한다.

 

tuple_1 = ("Max", 28, "New York")
tuple_2 = "Linda", 25, "Miami"		# 괄호는 옵션이다.

# 특수한 경우: 요소가 하나만 있는 튜플의 끝에는 쉼표가 있어야 한다.
# 그렇지 않으면 그것은 튜플로 인식되지 않는다.

tuple_3 = (25,)
print(tuple_1)
print(tuple_2)
print(tuple_3)

('Max', 28, 'New York')
('Linda', 25, 'Miami')
(25,)

# 튜플에서 기본으로 제공되는 기능을 이용하여 
# 리스트, 딕셔너리, 스트링 타입을 튜플 타입으로 변경할 수 있다.
tuple_4 = tuple([1,2,3])
print(tuple_4)

(1, 2, 3)

 

튜플 값들에 접근기

인덱스 번호를 참조하여 튜플 항목에 액세스 할 수 있습니다. 인덱스는 0부터 시작합니다.

tuple_1 = ("Max", 28, "New York")
item = tuple_1[0]
print(item)

Max

# 튜플 접근에 음수 인덱싱을 사용할 수 있습니다. 
# 예: -1은 마지막 항목을 나타냅니다.
item = tuple_1[-1]
print(item)

New York

 

튜플 값 추가 및 변경

튜플의 값을 추가하거나 변경하려 하면 에러가 발생한다.

tuple_1 = ("Max", 28, "New York")
tuple_1[2] = "Boston"

--- 에러 발생 ---
Traceback (most recent call last):
  File "c:\workspace\List.py", line 2, in <module>
    tuple_1[2] = "Boston"
TypeError: 'tuple' object does not support item assignment

 

튜플 삭제

tuple_2 = "Linda", 25, "Miami"
del tuple_2

 

튜플에 반복문 사용

tuple_1 = ("Max", 28, "New York")

# for 문을 사용하여 튜플값 출력
for i in tuple_1:
    print(i)
    
Max
28
New York

 

if 문을 사용하여 항목 존재 여부 체크

if "New York" in tuple_1:
    print("yes")
else:
    print("no")
    
yes

 

튜플에 유용한 함수들

my_tuple = ('a','p','p','l','e',)

# len() : 튜플의 길이 구하기
print(len(my_tuple))

5


# count(x) : x 값과 같은 요수의 갯수
print(my_tuple.count('p'))

2


# index(x) : x 와 같은 값의 첫번째 인덱스 번호
print(my_tuple.index('l'))

3


# 튜플 곱하기
my_tuple = ('a', 'b') * 5
print(my_tuple)

('a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'a', 'b')


# 튜플 합치기
my_tuple = (1,2,3) + (4,5,6)
print(my_tuple)

(1, 2, 3, 4, 5, 6)


# 리스트를 튜플로 변환
my_list = ['a', 'b', 'c', 'd']
list_to_tuple = tuple(my_list)
print(type(list_to_tuple))
print(list_to_tuple)

<class 'tuple'>     
('a', 'b', 'c', 'd')


# 튜플을 리스트로 변환
tuple_to_list = list(list_to_tuple)
print(type(tuple_to_list))
print(tuple_to_list)

<class 'list'>
['a', 'b', 'c', 'd']


# 문자열을 튜플로 변환
string_to_tuple = tuple('Hello')
print(string_to_tuple)

('H', 'e', 'l', 'l', 'o')

 

튜플 슬라이싱(Slicing)

# a[시작:끝:스탭], 스탭 시작값 1
a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

b = a[1:3] # 마지막 인덱스값은 포함되지 않는다.
print(b)

(2, 3)


b = a[2:] # 끝까지
print(b)

(3, 4, 5, 6, 7, 8, 9, 10)


b = a[:3] # 처음 부터
print(b)

(1, 2, 3)


b = a[::2] # 처음부터 시작해 두 스탭씩 뛰면서
print(b)

(1, 3, 5, 7, 9)


b = a[::-1] # 튜플 역전
print(b)

(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)

 

튜플에 형식 적용하기

# 튜플의 수와 일치하는 목록 생성
tuple_1 = ("Max", 28, "New York")
name, age, city = tuple_1
print(name)
print(age)
print(city)

Max
28
New York


# Tip: *를 사용하여 목록에 있는 여러 요소의 한 번에 포함할 수 있다.
my_tuple = (0, 1, 2, 3, 4, 5)
item_first, *items_between, item_last = my_tuple
print(item_first)
print(items_between)
print(item_last)

0
[1, 2, 3, 4]
5

 

중첩 튜플

튜플에는 다른 튜플(또는 기타 컨테이너 타입)이 포함될 수 있음.

a = ((0, 1), ('age', 'height'))
print(a)
print(a[0])

((0, 1), ('age', 'height'))
(0, 1)

 

튜플과 리스트 비교

튜플은 추가 및 수정이 불가능하기 때문에 내부적으로 최적화되어 있다. 따라서, 큰 데이터로 작업할 때 튜플이 더 효율적이다.

# 크기 비교
import sys
my_list = [0, 1, 2, "hello", True]
my_tuple = (0, 1, 2, "hello", True)

print(sys.getsizeof(my_list), "bytes")
print(sys.getsizeof(my_tuple), "bytes")

120 bytes
80 bytes 


# 리스트와 튜플의 실행 시간 비교
import timeit
print(timeit.timeit(stmt="[0, 1, 2, 3, 4, 5]", number=1000000))
print(timeit.timeit(stmt="(0, 1, 2, 3, 4, 5)", number=1000000))

0.0567256
0.007724599999999998

 

반응형

관련글 더보기

댓글 영역