본문 바로가기
Python/Coding Base

18. 튜플(Tuple)과 세트(Set)

by Nanki 2022. 2. 6.

튜플(Tuple)이란?

튜플은 리스트와 유사하지만, 튜플의 내용은 변경할 수 없다. 그런데 편한 리스트 대신 왜 불편한 튜플을 만든 이유는 무엇일까?

1. 리스트는 실수로 요소가 추가, 삭제, 변경될 수 있는 반면, 튜플은 수정이 불가하여 변경으로 인한 실수가 없다.

2. 튜플은 리스트 보다 접근 속도가 빠르다.

3. 튜플은 시퀀스의 일종이다.

  • 시퀀스의 일종이기에 인덱싱, 슬라이싱, 덧셈연산, 곱센 연산이 지원된다.

튜플의 표현식

tuple_ = (1,2,3)
tuple_ex = (1,)

리스트는 []를 쓰지만 튜플은 ()을 쓴다는 점에서 큰 차이를 보인다. 또한 값이 하나일 때, 튜플은 (1,)와 같이 쉼표를 반드시 붙여줘야 한다.

 

튜플의 값을 수정하려 한다면 다음과 같은 오류가 발생한다.

TypeError: Tuple' objct does not support item assignment

 

하지만 튜플을 결합하여 새로운 튜플은 만들 수 있다.

tuple_ = (1,2,3)
tuple_2 = ("a","b","c")
tuple_plus = tuple_ + tuple_2 
## 결과 값 : (1, 2, 3, 'a', 'b', 'c')

 

튜플의 또 다른 표현

양 가로를 하지 않아도 숫자들을 쉼표로 나열하여 변수에 할당해도 이를 튜플로 인식한다.

tuple_ = (1,2,3)
tuple_qu = 1,2,3 ### tuple_qu의 결과도 (1,2,3) 이다.

 

튜플의 대입 연산

1. 파이썬에서는 튜플을 이용해서 여러 개의 변수에 한번에 값을 대입할 수 있다.

worker = ("GM",35, "CS")
(name, age, dep) = worker

print(name, age, dep) # 각각 GM 35 CS 이 출력된다.

 

2. 변수 x와 변수y의 값을 교환할 때 한 문장으로 작성이 가능하다.

변수 x를 변수 y에 , 변수y값을 변수x에 대입한다고 가정하자. 일반적으로 아래처럼 프로그래밍이 가능할 것이다.

x=1
y=2 
temp = x ## 일단 x값을 temp에 넣고
x = y ## x에 y값을 넣는다.
y= temp ## y값에는 x값을 저장했던 temp값을 대입한다.

## 결과 x = 2, y = 1

동일한 결과를 튜플로 위 과정을 표현하면 더욱 간단하게 프로그래밍이 가능하다.

(x,y) = (y,x) ## 왼쪽은 변수들, 오른쪽은 대입할 값들이다. 대입 전 오른쪽이 먼저 계산된다.

단, 변수의 개수와 값의 갯수는 일치해야한다.

 

 

세트(Set)

세트는 우리가 수학에서 배운 집합이다. 따라서, 요소가 중복되면 자동으로 중복된 요소를 제거한다.

세트의 표현

중괄호로 표현된다.

set_example = {1,2,2,3}
## 저장된 요소 :  1,2,3

 

세트를 사용할 때 주의할 점

1. 인덱스가 없어 for문으로 값이 접근이 가능하나, 저장된 값이랑 순서가 뒤바뀔 수 있으니 주의해야 한다.

2. 세트는 모든 요소들을 해싱(hashing)을 이용하여 저장하고 관리한다. 해싱이 가능하려면 해쉬 코드를 가져야 하기 때문에 변경 가능한 항목을 넣을 수 없다. = 세트 요소로 리스트를 가질 수 없다.

  • 해싱 : 각각의 객체에 식별할 수 있는 숫자 코드를 부여하여 객체를 테이블에 저장함

3. 리스트를 세트로 바꾸면 유닉한 값들만(중복이 제거된 값) 남게 된다.

4. 세트는 변경 가능한 객체이나, 인덱스가 불가하여 연산은 의미가 없다.

 

세트가 유용한 이유?

교집합이나 합집과 같은 여러 가지 집합 연산을 지원하기 때문이다.

합집합 : union()

교집합 : & 또는 intersection()

차집합 : - 또는 difference()