파이썬에서 유용하게 쓰이는 라이브러리와 함수


heapq

list를 우선순위 큐처럼 사용할 수 있는 모듈

기본은 0번 인덱스의 값이 항상 최소값으로 저장되는 최소 힙이고, 우선순위 규칙을 정해줄 수 있다.

import heapq

heap = list()

# heap list에 원소 추가 
heapq.heappush(heap, 1)
# heapq로 변환
heapq.heapify(heap)
# heap list에 원소 제거
heapq.heappop(heap, 1)
# Max heap
heapq.heappush(heap, (-num, num))


defaultdict

딕셔너리와 동일한 구조로 만드는 서브 클래스, 작동하는 방식은 dict와 동일하지만 초기 자료형을 설정할 수 있어서 그래프의 연결관계를 만들어줄 때 자주 사용한다. 키의 개수를 세거나, 리스트, 집합을 정리할 때 많이 사용

from collections import defaultdict
dic = defaultdict()

# 자료형을 리스트로 고정
dic = defaultdict(list)
# 양방향 그래프 선언
s, e = 1, 2
dic[1].append(2)
dic[2].append(1)
# 모든 원소 확인
dic.items()
# 모든 키 확인
dic.keys()


map

여러 개의 데이터를 한 번에 다른 형태로 변환하기 위해 사용하는 내장함수

여러 개의 데이터를 담고 있는 list나 tuple을 대상으로 사용한다. map(적용 함수, 순회 가능한 자료형)으로 선언할 수 있으며, 대표적인 사용 문구로는

map(int, input().split())

가 있다.

# 작동방식
map(int, input().split())
# 1 2 3 입력
# split의 입력값() 공백을 기준으로 입력값을 잘라서 리스트로 반환 
['1', '2', '3']
# 삽입된 값을 int로 변환
[1, 2, 3]


zip

여러개의 데이터를 하나로 묶어주는 내장 함수

zip(*순회 가능한 자료형) 형태로 사용되며, 여러개의 데이터를 zip 객체로 변환해준다.

zip 객체는 list로 자유롭게 변환이 가능하며, 데이터의 개수가 2개일 경우 dict로 변환이 가능하다.

listA = [1, 2, 3]
listB = ['A', 'B', 'C']

# zip 결과
(1, 'A')
(2, 'B')
(3, 'C')


lambda

무명함수. 사용자 함수를 선언하지 않고 함수를 선언할 수 있는 기법이고 map에서 사용될 수 있다. 하지만 map보다는 같이 가져가야 하는 filter, sort 함수에 많이 활용되며 대부분의 규칙에 들어갈 수 있다.

lambda(x, y : x+y)(10, 20)
# 30
list(filter(lambda x : x<5 range(10)))
# [0, 1, 2, 3, 4]

listC = list(filter(lambda x : x < 5 range(10)))
print(listC)
# [0, 1, 2, 3, 4] 

# 위와 아래의 출력결과는 같다.
listA = range(10)
listB = list()
for i in range(10):
  if listA[i] < 5:
    listB.append(listA[i])
print(listB)

람다식의 꽃은 sort, sorted에 있다. 코딩 테스트에 출제되는 다중 조건 정렬문제 같은 경우 python3에서는 한 줄로 해결이 가능하다.

listA = [["A", 3], ["A", 2], ["B", 5], ["C", 4]]
listA.sort(key = lambda x : (x[1], x[0]))

# [["A", 2], ["A", 3], ["C", 4], ["B", 5]]

listA.sort(key = lambda x : (-x[1], x[0]))
# [['B', 5], ['C', 4], ['A', 3], ['A', 2]]

관심있을 포스팅