파이썬 API 둘러보기

collections

namedtuple(), Counter, deque, defaultdict, OrderedDict

list, set, dict에 가려져 있지만 파이썬의 자료구조는 의외로 빈약하다.

파이썬답게 필요한 만큼 씀풍씀풍 만들어 쓰라는 뜻일까.

 

리스트는 유연한 만큼이나 효율이 나쁘고(참고: time complexity),

라이브러리로 제공되는 것들도 어딘가 투박한 느낌을 지울 수 없다.

그런 면에서 collections 모듈은 아주 알차다. 버릴 게 없다.

 

namedtuple()

계산 - collectons.namedtuple()

 

Counter

예시: 

>>> cnt = Counter()
>>> for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
...     cnt[word] += 1
>>> cnt
Counter({'blue': 3, 'red': 2, 'green': 1})

 

생성자:

>>> c = Counter()                           # a new, empty counter
>>> c = Counter('gallahad')                 # a new counter from an iterable
>>> c = Counter({'red': 4, 'blue': 2})      # a new counter from a mapping
>>> c = Counter(cats=4, dogs=8)             # a new counter from keyword args

 

참고설명 잘 되어 있음.

 

deque

list 의 append() 와  pop() 은 O(n)

dqeue 의 append(), appendleft(), pop(), popleft() 는 거의 O(1)이라고 한다.

>>> from collections import deque
>>> q = deque([1,2,3])
>>> q
deque([1, 2, 3])

>>> q.append(4)
>>> q.appendleft(0)
>>> q
deque([0, 1, 2, 3, 4])

>>> q.pop()
4
>>> q.popleft()
0
>>> q
deque([1, 2, 3])

>>> q.extend([4,5,6])
>>> q.extendleft([-2, -1, 0])
>>> q
deque([0, -1, -2, 1, 2, 3, 4, 5, 6])

 

defaultdict([default_factory[, ...]])

사전에 없는 키를 참조할 때 기본값을 잡아 준다. 

dict를 상속.

s = "abcabcdef"
d = dict()
for c in s:
    if c in d:
        d[c] += 1
    else:
        d[c] = 1

print(d)

이런 코드를

from collections import defaultdict

s = "abcabcdef"
d = defaultdict(int)
for c in s:
    d[c] += 1

print(d)

이렇게 바꿀 수 있다.

dict.setdefault() 와 비슷하다.

 

OrderedDict

dict를 상속.

dict.keys(), dict.items() 등을 호출했을 때 저장한 순서대로 순회할 수 있다.

댓글

댓글 본문
작성자
비밀번호
버전 관리
장과장02
현재 버전
선택 버전
graphittie 자세히 보기