파이썬 알고리즘 필요 라이브러리
- CS/알고리즘
- 2021. 9. 12.
Colletions의 Defaultdict 라이브러리
Collection에는 Defaultdict 라이브러리가 있다. Defaultdict 라이브러리는 딕셔너리를 선언했을 때, 기본적으로 가지게 될 값을 지정해주는 라이브러리다. 예를 들어, 아래의 값은 무조건 에러가 발생한다. 이유는 A[char]에 대한 초기값이 설정이 되지 않았기 때문이다.
A = {]
for char in 'abcdefghijklmnopqrstuvwxyz' :
A[char] +=1
위의 경우를 최소화 해주기 위해 Defaultdict 라이브러리가 존재한다. 아래의 예시는 a라는 딕셔너리에 기본 자료형이 int인 값을 넣어준다.
from collections import defaultdict
a = defaultdict(int)
for char in 'abcdefghijklmnopqrstuvwxyz' :
a[char] +=1
이 뿐만 아니라 Lambda 식을 활용해 원하는 값을 초기값으로 넣어주는 방법도 있다. 아래의 코드를 실행하면, a 딕셔너리의 기본값은 정수형 1로 셋팅이 되어있다.
from collections import defaultdict
a = defaultdict(lambda : 1)
for char in 'abcdefghijklmnopqrstuvwxyz' :
a[char] +=1
Collections의 Counter 함수
Counter 함수는 해당 자료에 동일한 문자열이 몇개나 있는지 확인한 후, 그 값을 딕셔너리로 반환해주는 함수다. 예를 들어 [ 'a', 'a', 'b', 'b']를 Counter 함수로 사용할 경우, a와 b의 갯수를 샌 후에 딕셔너리 형태로 돌려준다. 딕셔너리 형태로 돌려주면 원하는 방식에 따라 keys(), value(), items()등을 활용해 자료를 작성해 나갈 수 있다.
from collections import Counter
a = ['a','b','c','c','d','bc']
char_list = Counter(a)
>>>
Counter({'c': 2, 'a': 1, 'b': 1, 'd': 1, 'bc': 1})
Itertools의 Combination, Permutations
Itertools에는 순열,조합함수가 있다. 그동안은 가내 수공업으로 짜왔는데, 가내수공업으로 짤 경우 생각보다 오랜 시간이 걸리기 때문에 코딩 테스트에는 가능하면 Combination, Permutations을 사용해서 구현해주면 좋을 것 같다. Combination은 조합이기 때문에 순서를 고려하지 않은 값을 나열해주며, Permutations는 순서까지 고려한 값을 나열해준다. 결과의 차이는 아래와 같다.
import itertools
a = ['a', 'b', 'c', 'd', 'e']
b = list(itertools.combinations(a))
c = list(itertools.combinations(a))
print(b)
>>>>
[('a', 'b'), ('a', 'c'), ('a', 'd'), ('a', 'e'), ('b', 'c'), ('b', 'd'), ('b', 'e'), ('c', 'd'), ('c', 'e'), ('d', 'e')]
print(c)
>>>>
[('a', 'b'), ('a', 'c'), ('a', 'd'), ('a', 'e'), ('b', 'a'), ('b', 'c'), ('b', 'd'), ('b', 'e'), ('c', 'a'), ('c', 'b'), ('c', 'd'), ('c', 'e'), ('d', 'a'), ('d', 'b'), ('d', 'c'), ('d', 'e'), ('e', 'a'), ('e', 'b'), ('e', 'c'), ('e', 'd')]
combinations 및 permutations 함수를 쓸 때는 itertools.combinations(리스트, 원하는 조합의 길이)로 사용한다.
'CS > 알고리즘' 카테고리의 다른 글
누적합 계산하기 (0) | 2021.10.04 |
---|---|
그리디 알고리즘 (0) | 2021.09.27 |
파이썬, Lower Bound 및 Upper Bound 구현 (0) | 2021.08.22 |
파이썬 리스트 정렬 (0) | 2021.08.15 |
다익스트라, 플로이드-와샬 알고리즘 (0) | 2021.08.03 |