이번에는 튜플, 세트에 대해서 알아보겠습니다.
튜플
튜플(Tuple)은 리스트와 유사하게 데이터 여러 개를 하나로 묶는 데 이용합니다. 튜플의 항목은 숫자, 문자열, 불, 리스트, 튜플, 세트, 딕셔너리 등으로 만들 수 있습니다. 튜플의 속성은 리스트와 유사합니다. 단, 튜플 데이터는 한 번 입력(혹은 생성)하면 그 이후에는 항목을 변경할 수가 없습니다.
튜플 만들기
리스트에서는 데이터를 입력할 때 대괄호([ ])를 이용했는데 튜플은 대괄호 대신 소괄호(( ))를 사용하거나 괄호를 사용하지 않고 데이터를 입력합니다. 항목은 리스트와 마찬가지로 콤마(,)로 구분합니다.
다음은 소괄호를 이용해 튜플을 생성하는 에입니다.
In : tuple1 = (1,2,3,4)
tuple1
Out : (1,2,3,4)
type()을 이용해 앞에서 생성한 데이터의 타입을 확인해 보겠습니다.
In : type(tuple1)
Out : tuple
앞에서 살펴본 리스트처럼 튜플도 '변수명[i]'로 튜플의 각 요소를 지정합니다. 다음은 생성된 튜플에서 인덱스 i로 위치를 지정해 값을 출력하는 예입니다.
In : tuple1[1]
Out : 2
다음은 소괄호를 사용하지 않고 튜플을 생성하는 예입니다.
In : tuple2 = 5,6,7,8
tuple2
Out : (5,6,7,8)
In : type(tuple2)
Out : tuple
다음으로 인자가 하나만 있는 튜플을 생성하는 방법을 살펴보겠습니다. 항목을 하나만 갖는 튜플을 생성할 때는 항목을 입력한 후에 반드시 콤마(,)를 입력해야합니다. 소괄호가 있거나 없거나 모두 콤마를 반드시 입력해야 합니다. 다음은 항목인 하나인 튜플을 생성하는 예입니다.
In : tuple3 = (9,)
tuple4 = 10,
print(tuple3)
print(tuple4)
Out : (9,)
(10,)
튜플 다루기
한번 생성된 튜플은 요소를 변경하거나 삭제할 수 없습니다. 이런 시도를 하면 리스트와 달리 오류가 발생합니다. 튜플의 이런 특성으로 튜플은 한 번 생성한 후에 요소를 변경할 필요가 없거나 변경할 수 없도록 하고 싶을 때 주로 이용합니다.
다음은 튜플의 요소를 변경하거나 삭제하고자 할 때 어떤 결과가 나타나는지 보여줍니다.
In : tuple5 = (1,2,3,4)
tuple5[1] = 5 #한번 생성된 튜플의 요소는 변경되지 않음
Out : -----------------------------------------------------------------------------
TypeError Traceback ( most recent call last)
<ipython-input-91-883687f4b7db> in <module>()
1 tuple5 = (1,2,3,4)
------>2 tuple5[1] = 5 #한번 생성된 튜플의 요소는 변경되지 않음
TypeError: 'tuple' object does not support item assignment
튜플의 요소를 변경하거나 삭제하는 메서드는 튜플에서 이용할 수 없지만 index()메서드나 count()메서드처럼 요소를 변경하지 않는 메서드는 튜플에서도 사용할 수 있습니다. index() 메서드는 인자와 일치하는 첫 번째 항목의 위치를 반환하고 count() 메서드는 인자와 일치하는 항목의 개수를 반환합니다.
다음은 튜플에서 index() 메서드를 이용하는 예입니다.
In : tuple6 = ('a', 'b', 'c', 'd', 'e', 'f')
tuple6.index('c')
Out : 2
위에서 index()메서드의 인자 'c'와 일치하는 튜플의 위치는 세 번째이므로 2를 반환했음을 볼 수 있습니다.
특정 인자와 일치하는 항목의 개수를 알고 싶을 때는 다음과 같이 count()메서드를 이용합니다.
In : tuple7 = ('a', 'a', 'a', 'b', 'b', 'c', 'd')
tuple7.count('a')
Out : 3
count()메서드의 인자 'a'와 일치하는 튜플 항목의 개수는 세 개이므로 3을 반환했습니다.
세트
리스트와 튜플과 유사한 또 다른 데이터 타입으로 세트(Set)가 있습니다. 세트는 수학의 집합 개념을 파이썬에서 이용할 수 있도록 만든 데이터 타입입니다. 세트가 리스트와 튜플과 다른 점은 데이터의 순서가 없고 데이터를 중복해서 쓸 수 없다는 것입니다. 또한 세트는 리스트에서 사용했던 메서드 외에 집합의 기본이 되는 교집합, 합집합, 차집합을 구하는 메서드를 사용할 수 있습니다. 그럼 이제 세트에 대해 살펴보겠습니다.
세트 만들기
세트를 생성할 때는 중괄호({ })로 데이터를 감싸면 됩니다. 항목과 항목 사이에는 리스트나 튜플과 마찬가지로 콤마(,)가 들어갑니다. 우선 다음처럼 세트를 생성하겟습니다.
In : set1 = {1,2,3}
set1a = {1,2,3,3}
print(set1)
print(set1a)
Out : {1,2,3}
{1,2,3,}
위의 예에서는 두 개의 변수 (set1, set1a)에 각각 세트를 생성해 대입했습니다. 변수 set1a에는 3을 중복해서 대입했지만 출력된 결과를 보면 set1a에는 중복된 데이터는 하나만 입력된 것을 볼 수 있습니다.
세트의 데이터 타입을 확인하기 위해서는 앞의 경우와 같이 type() 함수를 이용합니다.
In : type(set1)
Out : set
세트의 교집합, 합집합, 차집합 구하기
세트에서 사용할 수 있는 교집합, 합집합, 차집합 메서드를 이용하는 예를 살펴보겠습니다. 집합 A에는 {1,2,3,4,5}가, 집합 B에는 {4,5,6,7,8,9,10}이 들어있다고 가정하고 두 집합 A와 B의 교집합, 합집합, 차집합을 구해보겠습니다.
교집합, 합집합, 차집합을 위한 메서드는 각각 intersection(), union(), difference()입니다. 변수 A와 B가 있을 때 메서드의 사용법은 아래와 같습니다.
메서드 | 기호 표시 | 사용 예 |
교집합(intersection) | A ∩ B | A.intersection(B) |
합집합(union) | A ∪ B | A.union(B) |
차집합(difference) | A - B | A.difference(B) |
이제 다음 코드를 통해 메서드를 어떻게 이용하는지 살펴보겠습니다.
In : A={1,2,3,4,5}
B={4,5,6,7,8,9,10}
A.intersection(B)
Out : {4,5}
In : A.union(B)
Out : {1,2,3,4,5,6,7,8,9,10}
In : A.difference(B)
Out : {1,2,3}
위에서는 두 집합의 교집합, 합집합, 차집합을 구하기 위해 메서드를 이용했지만 연산자를 이용할 수도 있습니다. 세트가 두 개 있다고 할 때 두 집합의 교집합, ㅎ합집합, 차집합을 위한 세트 연산자는 각각 '&', '|'(shift+\), '-' 입니다.
다음 코드로 사용법을 확인해 보겠습니다.
In : A&B
Out : {4,5}
In : A|B
Out : {1,2,3,4,5,6,7,8,9,10}
In : A-B
Out : {1,2,3}
리스트, 튜플, 세트 간 타입 변환
앞에서 리스트, 튜플, 세트에 대해 살펴봤습니다. 여러 데이터를 다루다 보면 연산이나 처리를 할 때 데이터의 타입을 변환해야 할 필요가 있는데 데이터 타입은 list(), tuple(), set()을 이용해 서로 변환할 수 있습니다. 다음 예제를 봅시다.
In : a=[1,2,3,4,5]
In : type(a)
Out : list
위에서 리스트 변수 a를 생성했습니다. 여기서 type(a)의 결과로도 변수 a는 리스트임을 알 수 있습니다. 먼저 리스트를 튜플로 변환해 보겠습니다.
In : b=tuple(a)
b
Out : (1,2,3,4,5)
In : type(b)
Out : tuple
보다시피 리스트 a가 튜플로 바뀌었습니다. 다음으로 리스트 a를 세트로 변환해 보겠습니다.
In : c=set(a)
c
Out : {1,2,3,4,5}
In : type(c)
Out : set
역시 리스트 a가 세트로 바뀌었습니다. 위에서 튜플과 세트로 변환된 데이터를 다시 리스트로 변환해 보겠습니다.
In : list(b)
Out : [1,2,3,4,5]
In : list(c)
Out : [1,2,3,4,5]
위의 결과에서 리스트, 튜플, 세트는 형태의 유사성으로 인해 서로 변환할 수 있음을 알 수 잇습니다.
출처 : 데이터분석을 위한 파이썬 철저 입문 中