[Python] 파이썬 문법 - 라이브러리 문법

Doyeon Lim·2021년 1월 29일
0
post-thumbnail

이것이 코딩 테스트다 with 파이썬을 읽고 작성하는 글입니다.

표준 라이브러리


내장 함수

  • 별도의 import 명령어 없이 바로 사용할 수 있는 함수

  • 대표적으로 input(), print()가 있다.

  • sum() 함수 : 리스트와 같은 iterable 객체가 입력으로 주어졌을 때, 모든 원소의 합을 반환하는 함수

result = sum([1,2,3,4,5])
print(result) #15
  • min() 함수 : 파라미터가 2개 이상 들어왔을 때 가장 작은 값을 반환.
  • max() 함수 : 파라미터가 2개 이상 들어왔을 때 가장 큰 값을 반환.
result1 = min(1,3,4,2,5)
result2 = max(1,3,4,2,5)

print(result1, result2) #1 5
  • eval() 함수 : 수학 수식이 문자열 형식으로 들어오면 해당 수식을 계산한 결과를 반환.
result = eval("(3 + 5) * 7")
print(result) #56
  • sorted() 함수 : iterable 객체가 들어왔을 때, 정렬된 결과를 반환. key 속성으로 정렬 기준을 명시할 수 있고, reverse 속성으로 정렬된 리스트를 뒤집을 수 있다.
result = sorted([4, 3, 2, 6, 1])
print(result) #[1, 2, 3, 4, 6]

result = sorted([4, 3, 2, 6, 1], reverse = True)
print(result) #[6, 4, 3, 2, 1]
result = sorted([('가나다', 10), ('라마바', 43), ('사아자', 23)], key = lambda x: x[1], reverse = True)
print(result)  #[('가나다', 10), ('사아자', 23), ('라마바', 43)]
  • iterable 객체는 sort() 함수를 내장하고 있다.
data = [6, 3, 5, 1, 2]
data.sort()
print(data) #[1, 2, 3, 5, 6]

itertools

  • 반복되는 데이터를 처리하는 기능을 포함하고 있는 라이브러리

  • permutations : iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)을 계산해주는 클래스. 객체 초기화 이후, 리스트 자료형으로 변환하여 사용한다.

from itertools import permutations

data = ['a', 'b', 'c']
result = list(permutaions(data, 3))
print(result) #[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]
  • combinations : iterable 객체에서 r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우(조합)을 계산해주는 클래스. 객체 초기화 이후, 리스트 자료형으로 변환하여 사용한다.
from itertools import combinations

data = ['a', 'b', 'c']
result = list(combinations(data, 2))
print(result) #[('a', 'b'), ('a', 'c'), ('b', 'c')] 
  • product : permutaions와 같이 순열을 계산하지만 원소를 중복하여 뽑는다. 객체를 초기화 할 때는 뽑고자 하는 데이터의 수를 repeat 속성값으로 넣어주고, 리스트 자료형으로 변환하여 사용한다.
from itertools import product

data = ['a', 'b', 'c']
result = list(product(data, repeat = 2))
print(result) #[('a', 'a'), ('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'b'), ('b', 'c'), ('c', 'a'), ('c', 'b'), ('c', 'c')]
  • combinations_with_replacement : combinations와 같이 조합을 계산하지만 원소를 중복하여 뽑는다. 객체 초기화 이후, 리스트 자료형으로 변환하여 사용한다.
from itertools import combinations_with_replacement

data = ['a', 'b', 'c']
result = list(combinations_with_replacement(data, 2))
print(result) #[('a', 'a'), ('a', 'b'), ('a', 'c'), ('b', 'b'), ('b', 'c'), ('c', 'c')]

heapq

  • 힙 기능을 위한 라이브러리. 주로 우선순위 큐 기능을 구현하고자 할 때 사용된다.

  • 최소 힙으로 구성되어 있어 시간 복잡도 O(NlogN)에 오름차순 정렬이 완료된다.

  • heap1.heappush() : 힙에 원소 삽입하는 메서드

  • heapq.heappop() : 힙에서 원소 꺼내는 메서드

  • heapq를 이용한 힙 정렬 구현 소스코드
import heapq

def heapsort(iterable):
    h = []
    result = []
    # 모든 원소를 차례대로 힙에 삽입
    for value in iterable:
        heapq.heappush(h, value)
    # 힙에 삽입된 모든 원소를 차례대로 꺼내어 담기
    for i in range(len(h)):
        result.append(heapq.heappop())
    return result
    
result = heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
print(result) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • heapq를 이용한 최대 힙 구현(내림차순 힙 정렬) 소스코드
    => 힙에 원소 삽입 전에 부호를 반대로 바꾸었다가 힙에서 원소를 꺼낸 뒤에 다시 부호를 바꾸는 방식 사용.
import heapq

def heapsort(iterable):
    h = []
    result = []
    # 모든 원소를 차례대로 힙에 삽입
    for value in iterable:
        heapq.heappush(h, -value)
    # 힙에 삽입된 모든 원소를 차례대로 꺼내어 담기
    for i in range(len(h)):
        result.append(-heapq.heappop())
    return result
    
result = heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
print(result) #[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

bisect

  • 이진 탐색을 쉽게 구현할 수 있도록 제공되는 라이브러리

  • 정렬된 배열에서 특정 원소를 찾을 때 효과적으로 사용된다.

  • bisect_left(a, x) : 정렬된 순서를 유지하며 리스트 a에 데이터 x를 삽입할 가장 왼쪽 인덱스를 찾는 메서드

  • bisect_right(a, x) : 정렬된 순서를 유지하며 리스트 a에 데이터 x를 삽입할 가장 오른쪽 인덱스를 찾는 메서드

from bisect import bisect_left, bisect_right

a = [1, 2, 4, 4, 6]
x = 4

print(bisect_left(a, x)) #2
print(bisect_right(a, x)) #4
  • 값이 특정 범위에 속하는 원소의 개수 구하는 소스코드
from bisect import bisect_left, bisect_right

def count_by_range(a, left_value, right_value):
    left_index = bisect_left(a, left_value)
    right_index = bisect_right(a, right_value)
    return right_index - left_index
    
a = [1, 2, 3, 4, 4, 4, 4, 6, 8, 9]

print(count_by_range(a, 4, 4)) #4
print(count_by_range(a, -3, 3)) #3

collections

  • 유용한 자료구조를 제공하는 표준 라이브러리

  • deque : 큐를 구현하기 위해 사용. 연속적으로 나열되니 데이터의 시작이나 끝 부분에 데이터를 삽입, 삭제할 때 유용하다.

  • append(x) : 마지막 인덱스에 원소 삽입

  • appendleft(x) : 첫번째 인덱스에 원소 삽입

  • pop(x) : 마지막 원소 제거

  • leftpop(x) : 첫번째 원소 제거

from collections import deque

data = deque([2, 3, 4])
data.appendleft(1)
data.append(5)
print(data) #deque([1, 2, 3, 4, 5])
print(list(data)) #[1, 2, 3, 4, 5]
  • Counter : 등장 횟수를 세는 기능을 제공.
from collections import Counter

counter = Counter(['a', 'b', 'a', 'c', 'b', 'b', 'b'])

print(counter['b']) #4
print(counter['c']) #1
print(dict(counter)) #{'a': 2, 'b': 4, 'c': 1}

math

  • 자주 사용되는 수학적인 기능을 포함하고 있는 라이브러리

  • factorial(x) : x!값을 반환한다.

import math

print(math.factorial(5)) #120
  • sqrt(x) : x의 제곱근을 반환한다.
import math

print(math.sqrt(16)) #4
  • gcd(a, b) : a와 b의 최대 공약수를 반환한다.
import math
print(math.gcd(21, 14)) #7
  • pi, e와 같은 상수도 제공한다.
import math

print(math.pi) #3.141592653589793
print(math.e) #2.718281828459045
profile
🙇‍♀️ Android

0개의 댓글