파이썬 함수 및 라이브러리 사용법 정리

파이썬 함수

함수 정의 방법

def 함수명(매개변수1, 매개변수2):
    # 실행코드
    return 반환값

함수 바깥의 전역 변수에 접근할 수 있으며, 반환 값은 생략 가능합니다.

함수 호출 방법

함수명(매개변수1, 매개변수2)
함수명(매개변수2=, 매개변수1=)

변수명을 지칭하여 값을 넘겨주면 매개변수 순서가 달라도 됩니다.

람다 함수 사용 방법

# 람다 함수 정의 및 실행
(lambda 매개변수1, 매개변수2: 리턴값)(변수값1, 변수값2)

람다 함수는 짧은 일회성 함수를 간결하게 표현할 수 있고 재사용 불가합니다.
매개변수에 값을 받으며, 람다 안에서 만든 새 변수는 외부에서 접근할 수 없습니다.


파이썬 내장 함수

입력 함수

# 한 줄 입력 받기
input()

# 정수로 입력 받기
int(input())

# 많은 데이터를 input()보다 빠르게 입력 받기 (시간 초과 방지)
import sys
sys.stdin.readline().rstrip()
# readline() 후 생기는 줄바꿈을 rstrip()으로 제거합니다.
# rstrip()은 String의 오른쪽에서 줄바꿈 또는 전달받은 문자를 제거합니다.

# 공백으로 구분하여 리스트로 입력 받기
list(map(int, input().split()))
# 또는 list(map(int, sys.stdin.readline().split()))
# map으로 모든 원소에 int()를 적용합니다.

# 공백으로 구분하여 각 변수에 입력 받기
a, b, c = map(int, input().split())

출력 함수

# 출력 후 줄바꿈
print(출력값)

# 변수 출력
print("변수 값 :", 변수명)
# 쉼표로 구분하면 띄어쓰기로 구분하여 붙여줍니다.

# 줄바꿈 없이 출력
print(출력값, end="")
# end의 기본값은 \n이다.

# 중간에도 줄바꿈하여 출력
print(출력값1, "\n", 출력값2)

# 문자열과 int변수를 연결하여 출력
print("값 :", str(int변수))
# 또는 print(f"값 : {int변수}")

# 변수를 연결하여 출력
print(변수1, 변수2, sep="")
# 또는 print(f"{변수1}{변수2}")

자료형 확인 함수

type(변수명)

계산 함수

# 문자열 길이 or 원소 수
len(변수명)

# 모든 원소의 합계
sum(iterable객체)

# 가장 작은 값
min(iterable객체)
# 또는 min(원소1, 원소2)

# 가장 큰 값
max(iterable객체)
# 또는 max(원소1, 원소2)

정렬 함수

# 오름차순 정렬
sorted(iterable객체)

# 내림차순 정렬
sorted(iterable객체, reverse=True)
# 특정한 값을 기준으로 정렬

리스트 = [('1번', 35), ('2번', 75), ('3번', 50)]
sorted(리스트, key=lambda x:x[1], reverse=True)
# 리스트에 담긴 튜플의 두번째 값을 기준으로 내림차순 정렬

.sort 함수는 list만 정렬할 수 있지만, sorted 함수는 모든 iterable 객체를 정렬할 수 있습니다. 시간복잡도는 O(nlogn)입니다.

문자열 표현식 실행 함수

eval("수식")

eval 함수는 수식 실행 후 결과값을 반환합니다.


파이썬 표준 라이브러리

파이썬 표준 라이브러리(내장 모듈)은 내장 함수와 달리, import 후 사용 가능합니다.

itertools

순열과 조합 등 반복되는 형태의 데이터 처리 기능을 제공합니다.
generator 클래스로 출력하므로, list로 변환하여 사용하면 됩니다.

permutations 클래스

from itertools import permutations

list(permutations(iterable객체, n))

# list(permutations(['A', 'B', 'C'], 2))
# 결과 : [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]

permutations 함수는 iterable객체에서 n개의 데이터를 뽑아 나열하는 모든 경우의 순열을 튜플로 반환합니다.
순열은 순서를 고려하므로 (‘A’, ‘B’)와 (‘B’, ‘A’)가 존재할 수 있습니다.

combinations 클래스

from iteratools import combinations

list(combinations(iterable객체, n)

# list(combinations(['A', 'B', 'C'], 2))
# 결과 : [('A', 'B'), ('A', 'C'), ('B', 'C')]

# 로또 경우의 수 (조합)
# len(list(itertools.combinations(range(1, 46), 6)))
# 결과 : 8145060

combinations 함수는 iterable객체에서 n개의 데이터를 뽑아 나열하는 모든 경우의 조합을 튜플로 반환합니다.
조합은 순서가 다른 중복을 허용하지 않습니다.

product 클래스

from itertools import product

list(product(iterable객체, repeat=n))

# list(product('AB', repeat=2))
# 결과 : [('A', 'A'), ('A', 'B'), ('B', 'A'), ('B', 'B')]

product 함수는 permutations (순열) 함수와 비슷하나, 같은 원소도 중복하여 뽑습니다.

cominations_with_replacement 클래스

from iteratools import combinations_with_replacement

list(combinations_with_replacement(iterable객체, n)

# list(combinations_with_replacement('AB', 2))
# 결과 : [('A', 'A'), ('A', 'B'), ('B', 'B')]

cominations_with_replacement 함수는 combination (조합) 함수와 비슷하나, 같은 원소도 중복하여 뽑습니다.

heapq

리스트를 힙처럼 다룰 수 있게 도와주며, 다익스트라 최단 경로 알고리즘에서 우선순위 큐 기능 구현 시 사용됩니다.
힙은 완전 이진 트리로 구현되어 인덱스로 접근할 수 있고, 최대/최소 원소를 상수 시간에 찾을 수 있습니다.
부모가 자식보다 작은 힙을 최소힙, 부모가 자식보다 큰 힙을 최대힙이라고 합니다.

import heapq

# 리스트를 최소 힙으로 변환 : O(n)
heapq.heapify(리스트)

# 힙에 원소 삽입 후 오름차순 정렬 : O(logn)
heapq.heappush(리스트, )

# 힙에서 최소 원소 삭제하고 값 리턴 후 오름차순 정렬 : O(logn)
heapq.heappop(리스트)

# 힙에서 최소 값 리턴
리스트[0]

# 힙에서 모든 원소를 삭제 : O(nlogn)
while heap:
    heapq.heappop(heap)

파이썬에서는 기본적으로 최소 힙을 지원합니다.

최대 힙 구현 예시

import heapq

list = [1, 3, 5, 6, 7, 2, 4, 6, 8, 0]
temp_list = []
max_heap_list = []

# 임시 리스트에 모든 원소 삽입
for v in list:
    heapq.heappush(temp_list, -v)
    
# 임시 리스트에서 최대 원소 삭제하고 값 리턴 반복
for _ in range(len(temp_list)):
    max_heap_list.append(-heapq.heappop(temp_list))

파이썬에서 최대 힙은 직접 구현해야 합니다.

bisect

이진 탐색 기능을 제공하며, 정렬된 리스트에서 특정한 원소를 찾아야 할 때 효과적으로 사용됩니다.

from bisect import bisect_left, bisect_right

# 정렬된 리스트에서 값을 삽입할 가장 왼쪽 인덱스 찾기
left_i = bisect_left(리스트, )
# [1, 2, 4, 4, 8]에서 2를 반환

# 정렬된 리스트에서 값을 삽입할 가장 오른쪽 인덱스 찾기
right_i = bisect_right(리스트, )
# [1, 2, 4, 4, 8]에서 4를 반환

# 특정 값 범위에 속하는 원소의 개수
right_i - left_i

collections

데크(deque), Counter 등 유용한 자료구조를 제공합니다.

deque 클래스
파이썬에서 큐 또는 스택을 구현하기 위해 사용되며, 원소 추가/삭제 시 시간복잡도가 O(1)으로 빠릅니다.
리스트와 다르게 인덱싱, 슬라이싱이 불가하여 시작 부분이나 끝 부분의 원소를 다룰 때 효과적으로 사용합니다.

from collections import deque

변수명 = deque(리스트)

# 마지막 인덱스에 원소 추가
변수명.append()

# 첫 번째 인덱스에 원소 추가
변수명.appendleft()

# 마지막 인덱스 원소 삭제
변수명.pop()

# 첫 번째 인덱스 원소 삭제
변수명.popleft()

deque를 큐 자료구조로 이용하려면 append(), popleft()만 사용하여 선입선출해야 합니다.
deque를 스택 자료구조로 이용하려면 append(), pop()만 사용하여 선입후출해야 합니다.

Counter 클래스
반복 가능한 객체에서 값이 같은 원소의 수를 딕셔너리 형태로 제공합니다.

from collections import Counter

변수명 = Counter(리스트)

# 값에 해당하는 원소 수
변수명['값']

# Counter 변수를 사전 자료형으로 변환
dict(변수명)
# ['red', 'blue', 'red'] 리스트를 Counter로 변환했었다면,
# {'red': 2, 'blue': 1} 사전으로 변환됩니다.

defaultdict 클래스
기본값을 갖는 딕셔너리 생성에 사용됩니다.
append 시 존재하지 않는 key이면 생성하고 default 값을 줘서 에러 없이 쉽게 그래프를 구현할 수 있습니다.

from collections import defaultdict

# 출발 노드, 도착 노드, 가중치에 대한 간선 정보
array = [[2, 1, 2], [2, 3, 5], [2, 4, 1], [4, 3, 3]]

# 리스트를 기본값으로 가지는 사전 생성
graph = defaultdict(list)

# 출발 노드 키에 (도착노드, 가중치) 튜플로 값을 추가하여 그래프 구현
for i in array:
    graph[i[0]].append((i[2], i[1]))

math

팩토리얼, 제곱근, 최대공약수(GCD), 삼각함수, 파이(pi) 등 수학적 기능을 제공합니다.

import math

# 값의 팩토리얼 반환
math.factorial()

# 값의 제곱근 반환
math.sqry()

# 값의 최대공약수 반환
math.gcd(21, 14)

# 파이(pi) 반환 (3.141592653589793)
math.pi

# 자연상수 e 반환 (2.718281828459045)
math.e

파이썬 외부 라이브러리

파이썬에서 외부 라이브러리는 pip 명령어를 이용해 설치 후 import하여 사용 가능한 패키지입니다.

외부 라이브러리 사용 방법

# 외부 라이브러리 설치 (최신 버전)
pip install 라이브러리명

# 외부 라이브러리 삭제
pip uninstall 라이브러리명

# 설치된 외부 라이브러리 확인
pip list

Leave a comment