티스토리 뷰

파이썬에서 자주 활용하는 자료구조인 튜플과 리스트 그리고 집합에 대해서 포스팅해보겠습니다. 각 자료구조들의 특징과 메서드들을 이용해서 파이썬으로 프로그래밍 혹은 스크립트 작성 시 유용하게 사용하시기 바랍니다.

 

파이썬 자료구조
1. 튜플
    - 튜플 메서드

    - 튜플 패킹 ( Tuple Packing ), 언패킹 ( Tuple Unpacking )
2. 리스트
3. 집합
    -집합 메서드

 

튜플 ( Tuple )

튜플은 소괄호로 데이터들을 묶어 저장하는 자료구조의 형태입니다. 튜플은 리스트와 유사하지만, 한 번 생성되면 그 이후에는 튜플을 수정할 수 없습니다. 이러한 튜플의 성질 때문에 튜플의 요소에 접근하여 연산을 시도할 경우에 에러가 발생합니다. 때문에 튜플 자료구조는 요소를 변경할 필요가 없는 자료구조에 대해 저장하여 주로 사용합니다.

  • 소괄호로 묶어 데이터를 저장하는 자료구조
  • 한 번 생성하면 수정이나 변경이 불가한 자료구조
  • 튜플을 생성할 때, 소괄호로 묶어서 생성 가능하지만, 아래 tuple2와 tuple3처럼 소괄호를 생략해도 생성이 가능
tuple1 = (1,2,3,4)
tuple2 = 1,2,3
tuple3 = 1,

print(type(tuple1))
print(type(tuple2))
print(type(tuple3))
실행결과
<class 'tuple'>
<class 'tuple'>
<class 'tuple'>

 

튜플 메서드

튜플은 각 요소가 변경되거나 삭제가 불가능합니다. 따라서 insert()나 remove()와 같은 메서드의 사용은 제한되어 있습니다. 하지만 index()나 count()와 같은 메서드는 요소를 변경하지 않기 때문에 튜플에서도 사용이 가능합니다.

  • insert(), remove()와 같은 메서드는 사용이 불가
  • index(), count()와 같은 메서드는 사용 가능

 

튜플 패킹(Packing) & 언패킹(Unpacking)

먼저 튜플 패킹 여러 가지 변수를 튜플화 시키는 방법입니다. 그리고 언패킹은 튜플을 여러 가지 변수로 나누어 저장하는 방법입니다. 

  • 튜플 패킹 : 여러 가지 변수를 하나의 튜플로 저장하는 방식
  • 튜플 언패킹 : 하나의 튜플을 여러 가지 변수로 나누어 저장하는 방식
tuple = ('홍길동','24','190','90')

#1
name = tuple[0]
age = tuple[1]
height = tuple[2]
weight = tuple[3]
print(name, age, height, weight)

#2
name, age, height, weight = tuple
print(name, age, height, weight)

#3
name = '김아무개'
age = '30'
height = '170'
weight = '80'

tuple = name,age,height,weight
print(tuple)
print(type(tuple))
#1 실행결과
홍길동 24 190 90

#2 실행결과
홍길동 24 190 90

#3 실행결과
('김아무개', '30', '170', '80')
<class 'tuple'>

#1과 #2는 동일한 결과를 출력합니다. 하지만 #2의 경우는 #1의 코드보다 더욱 간결하게 작성됩니다. 이는 튜플 언패킹을 이용하여 여러 가지 변수로 튜플의 요소를 나누어 저장할 수 있기 때문입니다.

#3의 경우는 여러 가지 변수를 하나의 튜플로 저장하는 튜플 패킹의 예시입니다. 튜플 패킹 후 type을 출력하여 실제 데이터가 튜플화 되었는지 확인할 수 있습니다. 

튜플 언패킹 시, 원하는 데이터만 뽑아낼 수 있는 방법은?

튜플 언패킹은 튜플에서 원하는 요소를 뽑아 변수화 할 수 있습니다. 하지만 위 #2의 경우에서 이름인 '홍길동'과 '몸무게(weight)'정보만 얻어내고 싶은 경우 어떻게 하면 될까요? 이는 아래와 같은 방법으로 언패킹이 가능합니다.

tuple = ('홍길동','24','190','90')

#2-1
name, _, _, weight = tuple
print(name, weight)

#2-2
name, *_, weight = tuple
print(name, weight)
#2-1 실행결과
홍길동 90

#2-2 실행결과
홍길동 90

#2-1은 언패킹으로 원하는 변수만 추려서 얻을 수 있는 방법입니다. name과 weight이외 다른 값들은 '_'로 처리하여 생략하였습니다. 하지만 무언가 '_'가 2번 등장해서 이를 더 가독성높은 방법으로 표현할 수 있는 방법이 필요해보입니다. 그런 방법이 바로 2-2에서 사용한 *를 추가한 표현방법입니다.

 

리스트 ( List )

리스트와 관련된 내용은 아래 포스팅을 통해 확인 부탁드리겠습니다.

파이썬 자료구조 리스트

 

세트 ( Set )

튜플과 리스트 외에 세트라는 자료구조도 파이썬에서 지원하고 있습니다. 또한 세트는 수학의 집합 개념을 사용하여 교집합이나 합집합을 메서드를 통해 연산이 가능합니다. 즉, 데이터끼리 겹치는 부분을 찾고 싶거나 중복 없이 자료를 합치고 싶은 경우 세트 자료구조를 이용하면 편리할 것으로 생각됩니다.

  • 중괄호를 통해 생성
  • 수학에서 집합의 성질을 사용할 수 있어 교집합이나 합집합 연산도 가능
  • 중복된 데이터는 생성되지 않음

세트의 집합 연산

세트는 수학에서의 집합 연산을 사용할 수 있다고 말씀드렸는데, 이를 어떻게 메서드로 구현할 수 있는지 아래 표와 예시를 통해 알아보도록 하겠습니다.

메서드 수학 연산 메서드 표현방법
교집합 A ∩ B A.intersection(B)
합집합 A ∪ B A.union(B)
차집합 A - B A.difference(B)
A = {'a', 'b', 'd', 'e'}
B = {'b','c','e','f','g'}

print(A.intersection(B))	#교집합
print(A.union(B))		#합집합
print(A.difference(B))		#차집합 ( A-B )
print(B.difference(A))		#차집합 ( B-A )
실행 결과
{'b', 'e'}
{'a', 'e', 'b', 'f', 'g', 'c', 'd'}
{'a', 'd'}
{'c', 'f', 'g'}

 

댓글
공지사항