튜플과 집합


 이번에는 리스트와 같은 시퀀스 자료형인 튜플과 set을 이용한 새로운 자료형인 집합 자료형에대해 알아보겠습니다.

- 튜플

 
 튜플은 시퀀스 자료형으로 아래와 같은 특징들이 있습니다.

----------------------------------------------------------------------------------------

# 튜플의 특징

- 순서 있는 임의의 객체 모음

- 인덱싱, 슬라이싱, 연결, 반복, 멤버십 테스트 연산 가능

- 리스트와는 다르게 변경이 불가능

- 괄호를 생략가능 

   t=1,2,3 과 같이 생성하면 t는 자동적으로 튜플이 됨

- 자료가 하나인 경우 콤마(,)를 사용해야함

   t2=(1,) 또는 t2=1,

   t=(1)과같 이사용하면 튜플이 아니라 int형이 됨

- 연산을 할 경우 변경이 되지않고 새로운 튜플을 반환하는 개념

- 변수의 값 치환가능

- 리스트와는 다르게 메소드를 가지지않음


# 튜플의 사용 용도

- 함수가 두개 이상의 값을 리턴하는 경우

- 문자열 포멧팅

- 고정된 값을 쌍으로 표현하는 경우

  {'one':1,'two':2}과 같은 사전이 있을 경우 [('two',2),('one',1)] 과같이 표현됨

----------------------------------------------------------------------------------------


- 패킹, 언패킹


 위의 튜플들의 특징을 이용해 패킹과 언패킹을 수행 할 수있습니다. 리스트로도 패킹, 언패킹이 가능하지만, 보통 튜플을 이용합니다.


- 패킹 : 하나의 튜플 안에 여러 데이터를 넣는작업

- 언패킹 : 하나의 튜플에서 여러개의 데이터를 꺼내와 각각 변수에 할당하는 작업

----------------------------------------------------------------------------------------

# -*- coding: utf-8 -*-


# 패킹

p=1,2,'abc'

print p


# 언패킹

x,y,z=p

print x,y,z

----------------------------------------------------------------------------------------

(실행 결과)

(1, 2, 'abc')

1 2 abc

----------------------------------------------------------------------------------------

 추가적으로, 튜플과 리스트는 각각 list(), tuple() 내장 함수로 상호 변환이 가능합니다. 아래 코드는 상호 변환을 통해 튜플의 값을 변환 한 코드입니다.
----------------------------------------------------------------------------------------
T=1,2,3,4,5
L=list(T)
print L
L[0]=6
T=tuple(L)
print T
----------------------------------------------------------------------------------------
(실행 결과)
[1, 2, 3, 4, 5]
(6, 2, 3, 4, 5)
----------------------------------------------------------------------------------------

- 집합 자료형


 집합 자료형은 set() 내장 함수를 사용하는 자료형으로 변경이 가능하고, 각 원소간에 순서가 없어서 중복이 불가능한 자료형입니다. 따라서, 시퀀스 자료형 처럼 인덱싱이나 슬라이싱이 불가능합니다.
 set()내장함수의 인자로는 리스트, 튜플, 사전, 문자열이 사용 가능하며, 문자열은 'abc'일경우 a,b,c 각각 저장됩니다.
 사전의 경우 key값만 저장되며 value만을 저장하고 싶을때는 .vlaues() 메소드를 사용합니다. 집합 자료형의 생성은 아래와 같습니다.
----------------------------------------------------------------------------------------
# 집합 자료형 생성
a=set([(1,2,3)])
print type(a)
print a

b=set('abc')
print type(b)
print b

c=set({'one':1,'two':2})
print type(c)
print c

# 빈 set 객체 생성
d=set()
print d
----------------------------------------------------------------------------------------
(실행 결과)
<type 'set'>
set([(1, 2, 3)])
<type 'set'>
set(['a', 'c', 'b'])
<type 'set'>
set(['two', 'one'])
set([])
----------------------------------------------------------------------------------------

- set의 기본연산과 메소드


 set을 이용해 할 수 있는 연산은 len()을 이용해 집합의 원소의 수를 알수있는 것과, 멤버십 테스트(in, not in) 연산이 있습니다.

 set의 주요 메소드는 다음과 같습니다. 수학시간에 배운 집합을 생각하시면 편합니다. 새로운 집합을 반환하는 메소드와 기존 집합을 변경하는 메소드로 나뉩니다.
----------------------------------------------------------------------------------------
# 새로운 집합을 반환하는 메소드
1. issubset() : 부분집합인지 알아보는 메소드
   s<=t
2. issuperset() : 슈퍼집합인지(포함 하는지) 알아보는 메소드
   s>=t
3. uion() : 새로운 집합과 합집합을 반환하는 메소드
   s|t
4. intersection() : 새로운 집합과 교집합을 반환하는 메소드
   s&t
5. difference() : 새로운 집합과 기존집합의 차집합을 반환하는 메소드
   s-t
6. symmetric_difference() : 새로운 집합과 기존집합의 배타집합( st - s∩t)을 반환하는 메소드
   s^t
7. copy() : 집합을 복사하는 메소드로 값은 같지만 같은 집합은 아님
  D=A.copy()
  D==A # True
  D is A # False

# 기존 집합을 변경하는 메소드
1. update() : 집합을 변경하는 메소드
 - s.update(t) : s와 t의 합집합을 s에 저장
   s |= t
 - s.intersection_update(t) : s와 t의 교집합을 s에 저장
   s &= t
 - s.difference_update(t) : s와 t의 차집합을 s에 저장
   s -= t
 - s.symmetric_difference_update(t) : s와 t의 배타집합을 s에 저장
   s ^= t
2. s.add(x) : 원소 x를 집합 s에 추가하는 메소드
3. s.remove(x) : 원소 x를 집합 s에서 제거하는 메소드로 원소 x가 없으면 에러발생
4. s.discard(x) : 원소 x를 집합 s에서 제거하는 메소드로 원소 x가 없어도 에러가 발생하지 않음
5. s.pop() : 임의의 원소 x를 집합 s에서 제거하는 메소드로, s가 공집합이면 에러 발생
6. s.clear() : 집합 s의 모든 원소를 제거하는 메소드
----------------------------------------------------------------------------------------

 위의 메소드를 모두 실행 하기에는 무리가 있어 간단하게 사용해 봤습니다.
----------------------------------------------------------------------------------------
A=set([1,2,3,4,5])
B=set([3,4,5,6,7])
A.update(B)
print A

A.add(10)
print A

A.pop()
print A
----------------------------------------------------------------------------------------
(실행 결과)
set([1, 2, 3, 4, 5, 6, 7])
set([1, 2, 3, 4, 5, 6, 7, 10])
set([2, 3, 4, 5, 6, 7, 10])
----------------------------------------------------------------------------------------

출처 한국기술교육대학교 온라인평생교육원 파이썬프로그래밍



'언어 > Python' 카테고리의 다른 글

[파이썬] 파일 입·출력  (0) 2017.02.22
[파이썬] 사전  (0) 2017.02.19
[파이썬] 리스트 활용  (4) 2017.02.07
[파이썬] 리스트와 리스트 메소드  (0) 2017.02.05
[파이썬] 문자열 메소드와 포멧팅  (2) 2017.02.03

+ Recent posts