카테고리 없음

Python 컨테이너 - 튜플과 시퀀스

jin_j_i_n 2022. 10. 24. 00:12

튜플은 몇가지 점을 제외하면 리스트와 거의 비슷하며, 리스트와 다른점은 다음과 같다.

 

- 리스트는 [] (대괄호)를 사용하여 원소를 둘러싸지만, 튜플은 () (소괄호)로 둘러싼다.

- 리스트는 가변이지만, 튜플은 불변 자료형이다.

 

1. 튜플

튜플은 소괄호와 컴마를 사용한다. 이때 컴마가 있다면 괄호를 생략할 수도 있다.

t = ()
t = (1, 2, 3)
t = (1,)
t = 3, 
t = 1, 2, 3
t = (1, "Hello", 1.34, (3, 1))

 

괄호 없이 컴마만 아이템을 나열하는것을 패킹(packing) 이라고 말한다.

 

1.1 리스트 <- > 튜플

 

l = [123, 3.14, "Hello"]
t = tuple(l)

print(t) # (123, 3.14, 'Hello')

 

t = 123, 3.14, "Hello"
l = list(t)

print(l) # [123, 3.14, 'Hello']

 

1.2 튜플의 불변성

 

튜플은 불변 객체이기 때문에 리스트처럼 값을 변경하거나 삭제를 하면 에러가 발생한다.

 

t = (1, 2, 3)

del t[0] # TypeError: 'tuple' object doesn't support item deletion
t[2] = 3 # TypeError: 'tuple' object doesn't support item deletion

 

당연히 객체를 변경하는 메서드(append와 같은)도 존재하지 않는다.

 

튜플은 불변이기 때문에 리스트보다 메모리를 적게 사용한다.

l = ["사과", "바나나", "오렌지", 1, 2, 3]
t = tuple(l)

import sys

print(f"리스트 객체의 크기: {sys.getsizeof(l)}") # 리스트 객체의 크기: 104
print(f"튜플 객체의 크기: {sys.getsizeof(t)}") # 튜플 객체의 크기: 88

 

 

1.3 패킹과 언패킹

 

튜플을 만들 때 괄호를 생략하는 것을 여러 개체들을 묶어서 포장한다는 의미에서 패킹 (packing) 이라고 부른다.

 

t = 1, 2, 3

 

튜플을 언패킹을 할 수 있는데, 컴마와 대입 연산자를 사용하여 튜플을 언패킹 할 수 있다.

 

t = 1, 2, 3

x, y, z, = t

print(x) # 1
print(y) # 2
print(z) # 3

 

이때 튜플이 가지고 있는 아이템의 개수와 언패킹할 때 받아줄 변수의 개수가 맞지 않으면 오류가 발생한다.

 

t = 1, 2, 3

x, y = t

print(x)
print(y)
# ValueError: too many values to unpack (expected 2)

 

언패킹을 할 때, 아이템 일부를 사용하지 않을 예정이라면 언더 스코어로 개수만 채우면 된다.

 

t = 1, 2, 3

x, y, _ = t

 

참고로 문자열이나 리스트같은 다른 시퀀스에서도 언패킹을 사용할 수 있다.

 

s = "abc"
s1, s2, _ = s

l = [1, 2, 3]
l1, l2, l3 = l

 

 

2. 시퀀스 (Sequence)

 

문자열, 리스트, 튜플, 범위(range) 등이 시퀀스 자료형으로 분류된다. 아래 연산들은 모든 시퀀스 객체에서 사용될 수 있다. 시퀀스가 아이템들이 나열된 구조라는 것과 연관지으면 직관적으로 이해할 수 있다.

 

t = (1, 2, 3, 4, 5)

# 1이 t에 포함되어 있는지를 True/False로 리턴.
1 in t

# 1이 t에 포함되어 있지 '않은지'를 True/False로 리턴.
1 not in t

 

- 인덱싱과 슬라이싱

 

t = (1, 2, 3, 4, 5)

t[0]
t[1:3]

 

- len

 

t = (1, 2, 3, 4, 5)

# 아이템의 개수를 확인할 수 있다.
len(t)

 

- max, min

 

t = (1, 2, 3, 4, 5)

# 가장 큰 아이템을 찾아준다. 
max(t)

# 가장 작은 아이템을 찾아준다. 
min(t)

 

- index

 

t = ("A", "B", "C", "D", "E")

# "D"가 들어있는 위치 인덱스를 알려줍니다.
t.index("D")

 

- count 

 

t = (1, 2, 3, 3, 3, 3, 3, 4, 5)

# 3이 몇 개 들어있는지를 알려줍니다.
t.count(3)