A A
[Python] Advanced Data Type (고급 자료형)

Advanced Data Type (고급 자료형)

이번 글에서는 Python의 Advanced Data Type (고급 자료형)에 데하여 설명을 해보겠습니다.

List (리스트)

List(리스트)는 순서가 있는 가변 길이의 Sequence 자료형입니다.
  • 주요한 특징은, 순서를 유지하고, 중복순서를 하용하며, 요소의 추가, 삭제, 수정이 가능하다는 점입니다.
list_example = [1, 2, 3, 4]
list_example.append(5)  # [1, 2, 3, 4, 5]
list_example.remove(3)  # [1, 2, 4, 5]

Set (세트)

Set(세트)는 서가 없는 중복되지 않은 요소의 집합입니다.
  • 주요한 특징은, 순서가 없고, 중복순서를 하용하지 않으며, 집합 연산 (교집합, 합집합, 차집합)에 유용합니다.
set_example = {'a', 'b', 'c'}
set_example.add('d')     # {'a', 'b', 'c', 'd'}
set_example.remove('b')  # {'a', 'c', 'd'}

Dictionary (딕셔너리)

Dictionary (딕셔너리)는 Key(키)-Value(값 쌍으로 이루어진 가변 길이의 자료형입니다.
  • 주요한 특징은 키가 고유하고, 중복되지 않으며, 빠른 검색과 Data Mapping에 유용합니다.
dict_example = {'a': 1, 'b': 2, 'c': 3}
dict_example['d'] = 4      # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
del dict_example['b']      # {'a': 1, 'c': 3, 'd': 4}

Collections Moudle

Collections 모듈은 Python에 내장되어 있는 모듈입니다.
  • 컨테이너 자료형을 제공하여 기본 자료형을 확장해서 사용가능 하다는 특징이 있습니다.

 

deque (Double-Ended Queue)

deque는 양쪽 끝에서 빠르게 추가 및 삭제가 가능한 자료형 입니다.
  • Queue & Stack의 기능을 동시에 사용해야 할때 유용합니다.
  • collections.deque를 사용하여 생성합니다. 
from collections import deque

deque_example = deque([1, 2, 3])
deque_example.append(4)           # deque([1, 2, 3, 4])
deque_example.appendleft(0)       # deque([0, 1, 2, 3, 4])
deque_example.pop()               # deque([0, 1, 2, 3])
deque_example.popleft()           # deque([1, 2, 3])

Counter

Counter는 요소의 개수를 셀 때 사용되는 Dictionary 서브 Class 입니다.
  • 주로, 데이터의 빈도를 분석할때 유용한 클래스 입니다.
  • collections.Counter를 사용하여 생성합니다.
from collections import Counter

counter_example = Counter(['a', 'b', 'a', 'c', 'b', 'a'])
print(counter_example)  # Counter({'a': 3, 'b': 2, 'c': 1})

OrderedDict

OrderedDict는 순서를 유지하는 Dictionary 입니다.
  • 일반적으로, 데이터의 입력 순서가 중요한 경우에 사용합니다.
  • collections.OrderedDict를 사용하여 생성합니다.
from collections import OrderedDict

ordered_dict_example = OrderedDict()
ordered_dict_example['a'] = 1
ordered_dict_example['b'] = 2
ordered_dict_example['c'] = 3
print(ordered_dict_example)  # OrderedDict([('a', 1), ('b', 2), ('c', 3)])

defaultdict

defaultdict은 기본 값을 제공하는 Dictionary 입니다.
  • 주로 사용하는 경우는 Key값ㅇ가 존재하지 않을 때 기본 값을 제공하여 코드의 간결성과 안전성을 높입니다.
  • collections.defaultdict를 사용하여 생성합니다.
from collections import defaultdict

defaultdict_example = defaultdict(int)
defaultdict_example['a'] += 1
print(defaultdict_example)  # defaultdict(<class 'int'>, {'a': 1})

 

namedtuple

namedtuple은 필드 이름을 가지는 튜플 서브 클래스입니다.
  • tuple의 가독성을 높이고, 데이터의 구조를 명확히 정의할 때 사용합니다.
  • collections.namedtuple를 사용하여 생성합니다.
from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])
point_example = Point(10, 20)
print(point_example)  # Point(x=10, y=20)
print(point_example.x, point_example.y)  # 10 20

Comprehension (컴프리헨션)

Comprehension (컴프리헨션)은 기존의 List, 집합, Dictionary 등을 더 간결하고 효율적으로 생성하는 방법입니다.
  • 반복문을 대체하여 더 간결한 표현이 가능하며, 대규모 데이터를 효율적으로 처리할 수 있습니다.
  • 이를 통해 코드의 가독성을 높이고 작성 시간을 줄일 수 있습니다.

 

List Comprehension (리스트 컴프리헨션)

List Comprehension (리스트 컴프리헨션)은 리스트를 간결하게 생성하는 방법입니다.
  • 기본 문법
[expression for item in iterable]
  • 조건부 List Comprehension
[expression for item in iterable if condition]
  • Example (예시)
# 기존 방법
numbers = [1, 2, 3, 4, 5]
squares = []
for n in numbers:
    squares.append(n ** 2)

# 리스트 컴프리헨션
squares = [n ** 2 for n in numbers]

 

Dictionary Comprehension (딕셔너리 컴프리헨션)

Dictionary Comprehension (딕셔너리 컴프리헨션)은 딕셔너리를 간결하게 생성하는 방법입니다.
  • 기본 문법
{key: value for item in iterable}
  • 조건부 Dictionary Comprehension
{key: value for item in iterable if condition}
  • Example (예시)
# 기존 방법
numbers = [1, 2, 3, 4, 5]
squares = {}
for n in numbers:
    squares[n] = n ** 2

# 딕셔너리 컴프리헨션
squares = {n: n ** 2 for n in numbers}

 

Set Comprehension (집합 컴프리헨션)

Set Comprehension (집합 컴프리헨션)은 집합을 간결하게 생성하는 방법입니다.
  • 기본 문법
{expression for item in iterable}
  • 조건부 Set Comprehension
{expression for item in iterable if condition}
  • Example (예시)
# 기존 방법
numbers = [1, 2, 2, 3, 4, 4, 5]
unique_squares = set()
for n in numbers:
    unique_squares.add(n ** 2)

# 집합 컴프리헨션
unique_squares = {n ** 2 for n in numbers}

 

Comprehension의 필요성

 

  • 대규모 데이터를 효율적으로 처리
    • 컴프리헨션은 대규모 데이터를 처리할 때 더 빠르고 효율적으로 작동할 수 있습니다.
    • 반복문을 간결하게 표현함으로써 실행 속도를 높일 수 있습니다.
  • 복잡한 반복문을 간결하게 표현
    • 컴프리헨션을 사용하면 복잡한 반복문을 단 한 줄의 코드로 표현할 수 있어 가독성이 향상됩니다.
    • 이는 코드 유지보수성을 높이고, 버그 발생 가능성을 줄여줍니다.