[Coding Test] 관련 강의 정리 02

GreenBean·2022년 5월 9일
0
post-thumbnail

Coding Test

유용한 Python 모듈 collections #1

유용한 Python 모듈 collections #1 collections

collections

  • collections 모듈은 파이썬의 범용 내장 컨테이너 dict, list, settuple에 대한 대안을 제공하는 특수 컨테이너 데이터형을 구현

공식 문서 collections

  • namedtuple: 이름 붙은 필드를 갖는 튜플 서브 클래스를 만들기 위한 팩토리 함수
  • deque: 양쪽 끝에서 빠르게 추가와 삭제를 할 수 있는 리스트류 컨테이너
  • ChainMap: 여러 매핑의 단일 뷰를 만드는 딕셔너리류 클래스
  • Counter: 해시 가능한 객체를 세는데 사용하는 딕셔너리 서브 클래스
  • OrderedDict: 항목이 추가된 순서를 기억하는 딕셔너리 서브 클래스
  • defaultdict: 누락된 값을 제공하기 위해 팩토리 함수를 호출하는 딕셔너리 서브 클래스
  • UserDict: 더 쉬운 딕셔너리 서브 클래싱을 위해 딕셔너리 객체를 감싸는 래퍼
  • UserList: 더 쉬운 리스트 서브 클래싱을 위해 리스트 객체를 감싸는 래퍼
  • UserString: 더 쉬운 문자열 서브 클래싱을 위해 문자열 객체를 감싸는 래퍼

유용한 Python 모듈 collections #2

유용한 Python 모듈 collections #2 namedtuple

namedtuple

  • 튜플처럼 immutable
  • 이름을 통해 데이터로 접근 가능
  • 메모리 활용 최적화 (성능상에 이점이 있음)
    • 활용하려는 자료형에 비해 어느 정도 성능상에 이점이 있다는 것은 시간 측정 필요

Tip!

  • mutable은 값이 변한다는 뜻이며 immutable은 값이 변하지 않는다는 의미
# 예시 코드

>>> from collections import namedtuple

>>> Point = namedtuple('Point', ['x', 'y'])
>>> p = Point(11, y=22)
>>> p[0] + p[1]
33

>>> p
Point(x=11, y=22)

>>> p.x , p.y
(11, 22)

>>> p[x] # error

>>> i, j = p
>>> i
11
>>> j
22

>>> Point
__main__.Point

>>> d = {
...     'x': 100,
...     'y': 200,
... }
>>> p = Point(**d)
>>> p.x
100

>>> p._asdict()
OrderedDict([('x', 100), ('y', 200)])

>>> p._fields
('x', 'y')

>>> re_p = p.replace(x=1000)
>>> re_p
Point(x=1000, y=200)
>>> p
Point(x=100, y=200)
# 예시 코드

>>> from collections import namedtuple

>>> 기술명세 = namedtuple('기술', '기술이름, 자격증, 연차')
>>> 화야 = 기술명세('파이썬', '정보처리기사', '3')
>>> 화야
기술(기술이름='파이썬', 자격증='정보처리기사', 연차='3')

유용한 Python 모듈 collections #3

유용한 Python 모듈 collections #3 deque

deque

  • 양쪽 끝에서 빠르게 추가와 삭제를 할 수 있는 리스트류 컨테이너
  • 양방향 큐
  • 데이터의 회전도 가능
  • maxlen을 설정하여 최대 항목 수를 설정
# 예시 코드

>>> from collections import deque

>>> a = [10, 20, 30, 40, 50]
>>> d = deque(a)
>>> d
deque([10, 20, 30, 40, 50])

>>> d.append(100)
>>> d
deque([10, 20, 30, 40, 50, 100])

>>> d.appendleft(1000)
>>> d
deque([1000, 10, 20, 30, 40, 50, 100])

>>> temp = d.pop()
>>> d
deque([1000, 10, 20, 30, 40, 50])
>>> temp
100

>>> temp = d.popleft()
>>> d
deque([10, 20, 30, 40, 50])
>>> temp
1000

>>> d.rotate(2)
>>> d
deque([40, 50, 10, 20, 30])

>>> d.rotate(-1)
>>> d
deque([50, 10, 20, 30, 40])

유용한 Python 모듈 collections #3

유용한 Python 모듈 collections #4 ChainMap

ChainMap

  • 여러개의 컨테이너 자료형을 연결할 수 있음
# 예시 코드

>>> from collections import ChainMap

>>> oneDict = {'one': 1, 'two': 2, 'three': 3}
>>> twoDict = {'four': 4}

>>> chain = ChainMap(oneDict, twoDict)
>>> chain
ChainMap({'one': 1, 'two': 2, 'three': 3}, {'four': 4})

>>> 'one' in chain
True
>>> 'four' in chain
True
>>> 'five' in chain
False

>>> len(chain)
4
>>> chain.values()
ValuesView(ChainMap({'one': 1, 'two': 2, 'three': 3}, {'four': 4}))
>>> chain.keys()
KeysView(ChainMap({'one': 1, 'two': 2, 'three': 3}, {'four': 4}))
>>> chain.items()
ItemsView(ChainMap({'one': 1, 'two': 2, 'three': 3}, {'four': 4}))

>>> chain[0] # error
>>> chain['oneDict'] # error

>>> chain.maps
[{'one': 1, 'two': 2, 'three': 3}, {'four': 4}]
>>> chain.maps[0]
{'one': 1, 'two': 2, 'three': 3}
>>> chain.maps[1]
{'four': 4}

>>> one = [1, 2, 3, 4,]
>>> two = [5, 6, 7, 8]
>>> three = ChainMap(one, two)
>>> three
ChainMap([1, 2, 3, 4,], [5, 6, 7, 8])

>>> 6 in three
True
>>> three.maps[0]
[1, 2, 3, 4]
>>> three.maps[1]
[5, 6, 7, 8]
profile
🌱 Backend-Dev | hwaya2828@gmail.com

0개의 댓글