Collections 모듈
Collections 모듈
- Counter
- 컨테이너 내에 동일한 값의 자료 개수를 파악할 때 사용하는 객체로, 컨테이너를 생성하는 생성자다.
- 결과를 사전형태로 리턴하며, 사전형태의 특성상 정렬되어있지 않다.
- most_common 함수를 이용해 상위 n개의 시퀀스를 추출할 수 있다.
container = Counter() # Counter 함수를 이용한 객체생성
for n in "aaabbc":
print( "%s : %d" %(n, container(n))
>>> a : 3
>>> b : 2
>>> c : 1
# most_common 함수 이용
container = Counter()
container.update("aaaaaabbbbbccccdddeee")
for item, cnt in container.most_common(2):
print( "%s : %d" %(item, cnt))
>>> a : 6
>>> b : 5
- 산술, 집합연산이 가능하다.
ct3 = Counter(['a','b','c','b','d','a']) ct4 = Counter('aeroplane') print(ct3-ct4) # 차집합
print(ct3+ct4) # 합집합
print(ct3&ct4) # 교집합
print("union", ct3|ct4) # 유니온집합 => 합집합과 비슷하나, 중복이 있을 경우, 최대 값만 출력(합을 하지 않는다)
Defaultdict
Dict 관련 컨테이너를 초기화할 때 (생성할 때), key 값이 없으면 default 값을 반환한다.
인자로 default_factory를 지정하지 않으면 없는 key값은 key error를 발생시킨다.
def default_factory(): return "aa" dic = collections.defaultdict(default_factory, n1 = 'hi') print(dic) >>> defaultdict(<function default_factory at 0x10670a950>, {'n1': 'hi'})
print(dic['n1']) >>> hi
print(dic['n2']) # 맞는 key값이 없으면 return된 값을 초기값으로 설정한다.
>>> aa
Deque(덱)
양방향 큐
List형 컨테이너를 생성하며, 양방향 출입이 가능해 appendleft(), extendleft()와 같은 함수를 사용할 수 있다.
import collections deq = collections.deque("Hello Python") deq.extendleft('aa') print(deq)
>>> deque(['a', 'a', 'H', 'e', 'l', 'l', 'o', ' ', 'P', 'y', 't', 'h', 'o', 'n'])
deq.appendleft('bb') print(deq)
>>> deque(['bb', 'a', 'a', 'H', 'e', 'l', 'l', 'o', ' ', 'P', 'y', 't', 'h', 'o', 'n'])
※ append와 extend의 차이
append : Object를 맨 뒤에 추가한다.
extend : Iterable 객체의 Elements를 list에 append한다.
str1 = ['abc'] str1.append('dd')
print(str1)
>>> ['abc', 'dd'] # append
str1.extend('ee') print(str1)
>>> ['abc', 'dd', 'e', 'e'] # extend
NamedTuple
인덱스로 value에 접근하는 기존의 tuple과 달리 NamedTuple은 key를 이용해 value에 접근할 수 있다.
dict 형태와 비슷하나 메모리 효율이 뛰어나다.
Person = collections.namedtuple("Person", "name, age, gender")
aa = Person("LCW", 27, "남성")
bb = Person("KSA", 24, "여성")
print(aa)
>>> Person(name="LCW", age=27, gender="남성")
print(bb.name)
>>> KSA
- OrderedDict
- 자료의 순서를 기억하는 dict형 클래스
- 자료의 값만으로 True/False를 구분하는 dict와 달리 OrderedDict는 순서까지 중요하다.
# Regular Dict
dic3 = {} dic3["서울"]="LG트윈스" dic3['대구']='삼성라이온즈' dic3['광주']='기아타이거즈' dic4 = {} dic4["서울"]="LG트윈스" dic4['광주']='기아타이거즈' dic4['대구']='삼성라이온즈'
# OrderedDict
dic5 = collections.OrderedDict() dic5["서울"]="LG트윈스" dic5['대구']='삼성라이온즈' dic5['광주']='기아타이거즈' dic6 = collections.OrderedDict() dic6['대구']='삼성라이온즈' dic6["서울"]="LG트윈스" dic6['광주']='기아타이거즈'
print(dic3==dic4) # dict형 비교 >>> True
print(dic5==dic6) # ordereddict형 비교
>>> False
Ps. 본 포스트는 인프런의 '파이썬으로 배우는 자료구조와 알고리즘' 강의 내용을 정리합니다.
웹 개발자가 알려주는 수익형 블로그 고속 성장 A to Z