주요 라이브러리 문법

SummerToday·2024년 8월 18일
0
post-thumbnail
post-custom-banner

표준 라이브러리

특정한 프로그래밍 언어에서 자주 사용되는 표준 소스 코드를 미리 구현해 놓은 라이브러리이다. 코딩 테스트에 있어 반드시 알고 있어야 하는 라이브러리는 다음 6가지이다.

  • 내장 함수
    print(), input()과 같은 기본 입출력 기능부터 sorted()와 같은 정렬 기능을 포함하고 있는 기본 내장 라이브러리이다.

  • itertools
    파이썬에서 반복되는 형태의 데이터를 처리하는 기능을 제공하는 라이브러리이다. 순열과 조합 라이브러리를 제공한다.

  • heapq
    힙(Heap) 기능을 제공하는 라이브러리이다. 우선 순위 큐 기능을 구현하기 위해 사용한다.

  • bisect
    이진 탐색(Binary Search) 기능을 제공하는 라이브러리이다.

  • collections
    덱(deque), 카운터(Counter) 등의 유용한 자료구조를 포함하고 있는 라이브러리이다.

  • math
    필수적인 수학적 기능을 제공하는 라이브러리이다. 팩토리얼, 제곱근, 최대공약수(GCD), 삼각함수 관련 함수부터 파이(pi)와 같은 상수를 포함하고 있다.


내장함수

파이썬에는 별도의 import 명령어 없이 바로 사용할 수 있는 내장 함수가 존재한다.

  • sum()
    iterable 객체(리스트, 사전 자료형, 튜플 자료형 등의 반복 가능한 객체)가 입력으로 주어졌을 때, 모든 원소의 합을 반환한다.
result = sum([1, 2, 3])
print(result) # 출력: 6

  • min()
    파라미터가 2개 이상 들어왔을 때 가장 작은 값을 반환한다.
result = min(7, 3, 5, 2)
print(result) # 출력: 2

  • max()
    파라미터가 2개 이상 들어왔을 때 가장 큰 값을 반환한다.
result = max(2, 4, 1)
print(result) # 출력: 4

  • eval()
    수학 수식이 문자열 형식으로 들어오면 해당 수식을 계산한 결과를 반환한다.
result = eval("(2 + 3) * 7")
print(result) # 출력: 35

  • sorted()
    iterable 객체가 들어왔을 때, 정렬된 결과를 반환한다. key 속성으로 정렬 기준을 명시할 수 있으며, reverse 속성으로 정렬된 결과 리스트를 뒤집을지의 여부를 설정할 수 있다.
# 1
result = sorted([1, 4, 2, 3])
print(result) # 출력: [1, 2, 3, 4]
# 2
result = sorted([1, 4, 2, 3], reverse = True)
print(result) # 출력: [4, 3, 2, 1]
# 3
result = sorted([('a', 3), ('b', 2), ('c', 7)], key = lambda x: x[1], reverse = True)
print(result) # 출력: [('c', 7), ('a', 3), ('b', 2)
  • 참고로 리스트와 같은 iterable 객체는 기본으로 sort() 함수를 내장하고 있다.
    data = sort[2, 4, 1, 3]
    data.sort()
    print(data) # 출력: [1, 2, ,3 ,4]

itertools

파이썬에서 반복되는 데이터를 처리하는 기능을 포함하고 있는 라이브러리이다. 가장 유용하게 사용할 수 있는 클래스는 permutations, combinations이다.

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

    from itertools import permutations
    
    data = ['A', 'B', 'C']
    result = list(permutations(data, 3)) # 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개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우(조합)을 계산한다. combination도 클래스이므로 객체 초기화 이후에는 리스트 자료형을 변환하여 사용한다.

    from itertools import combination
    
    data = ['A', 'B', 'C'] # 데이터 준비
    result = list(combinations(data, 2)) # 2개를 뽑는 모든 조합 구하기
    
    print(result) # 출력: [('A', 'B'), ('A', 'C'), ('B', 'C')]

  • product
    permutations와 같이 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)를 계산한다. 하지만 중복을 허용하여 뽑는다. product도 클래스이므로 객체 초기화 이후에는 리스트 자료형으로 변환하여 사용한다.

    from itertools import product
    
    data = ['A', 'B', 'C'] # 데이터 준비
    result = list(product(data, repeat=2)) # 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와 같이 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우(조합)를 계산한다. 하지만 중복을 허용하여 뽑는다. combinations_with_replacement도 클래스이므로 객체 초기화 이후에는 리스트 자료형으로 변환하여 사용한다.

    from itertools import combinations_with_replacement
    
    data = ['A', 'B', 'C'] # 데이터 준비
    result = list(combinations_with_replacement(data, repeat=2)) # 2개를 뽑는 모든 조합 구하기(중복허용)
    
    print(result) # 출력: [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'C'),]

heapq

파이썬에서는 힙 기능을 위해 heapq 라이브러리를 제공한다. heapq는 다양한 알고리즘에서 우선순위 큐 기능을 구현하고자 할 때 사용된다.

  • 파이썬의 힙은 최소 힙으로 구성되어 있어, 원소를 힙에 넣었다 빼기만 해도 O(NlogN)에 오름차순 정렬이 된다. 보통 최소 힙 자료 구조의 최상단 원소는 항상 가장 작은 원소이기 때문이다.

  • heapq.heappush(): 원소를 삽입할 때 사용

  • heapq.heappop(): 원소를 꺼낼 때 사용

  • ex. 최소 힙

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

  • ex. 최대 힙

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

bisect

파이썬에서는 이진 탐색을 쉽게 구현할 수 있도록 bisect 라이브러리를 제공한다.

  • '정렬된 배열'에서 특정한 원소를 찾아야 할 때 매우 효과적으로 사용된다.

  • bisect_left(), bisect_right() 함수가 중요하며 시간 복잡도 O(logN)에 동작한다. 특히 정렬된 리스트에서 특정 범위에 속하는 값의 원소들의 개수를 구할 때 효과적으로 사용될 수 있다.

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

  • bisec_right(a, x): 정렬된 순서를 유지하도록 리스트 a에 데이터 x를 삽입할 가장 오른쪽 인덱스를 찾는다.

  • ex. 정렬된 리스트에서 특정 값을 삽입할 위치의 인덱스 구하기

    from bisec import bisec_left, bisec_right
    
    a = [1, 2, 4, 4, 8]
    x = 4
    
    print(bisec_left(a, x)) # 출력: 2
    print(bisec_right(b, x)) # 출력: 4
  • ex. 정렬된 리스트에서 특정 범위에 속하는 값의 원소들의 개수를 구하기

    from bisec import bisec_left, bisec_right
    
    # 값이 [left_value, right_value] -> left_value<= x <= right_value인 데이터의 개수를 반환하는 함수
    def count_by_range(a, left_value, rigtht_value):
        right_index = bisect_right(a, right_value)
        left_index = bisect_left(a, left_value)
        return right_index - left_index
        
    a = [1, 2, 3, 3, 3, 3, 4, 4, 8, 9]
    
    # 값이 4인 데이터 개수 출력
    print(count_by_range(a, 4, 4))
    
    # 값이 [-1, 3] 범위에 있는 데이터 개수 출력
    print(count_by_range(a, -1, 3))
    
    # 출력: 
    2
    6

Collections

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

  • 특히, deque와 Counter 클래스가 코딩 테스트에서 유용하게 사용된다.

  • deque

    • deque를 이용하여 큐 자료구조를 구현한다. 앞쪽에 있는 원소를 처리할 때는 리스트 자료형의 메서드보다 시간 복잡도가 O(1)로 우수하다.

    • deque에서는 리스트 자료형과 다르게 인덱싱, 슬라이싱 등의 기능은 사용할 수 없지만 연속적으로 나열된 데이터의 시작 부분이나 끝 부분에 데이터를 삽입하거나 삭제할 때는 매우 효과적이다.

      • popleft() : 첫번째 원소 제거

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

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

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


    • 따라서 deque를 큐 자료구조로 이용할 때, 원소를 삽입할 때에는 append()를 사용하고 원소를 삭제할 때에는 popleft()를 사용하면되고, 먼저 들어온 원소가 항상 먼저 나가게 된다.

    • ex.

      from collections import Counter
      
      data = deque([2, 3, 4])
      data.appendleft(1)
      data.apend(5)
      
      print(data)
      print(list(data)) # 리스트 자료형으로 변환
      # 출력
      deque([1, 2, 3, 4, 5])
      [1, 2, 3, 4, 5]

  • Counter

    • 등장 횟수를 세는 기능을 제공한다.

    • 리스트와 같은 iterable 객체가 주어졌을 때, 해당 객체 내부의 원소가 몇 개씩 존재하는 지 알 수 있다.

    • ex.

      from collections import Counter
      
      counter = Counter(['a', 'b', 'a', 'c', 'b', 'b'])
      
      print(counter['b']) # b의 개수 출력
      print(counter['c']) # c의 개수 출력
      print(dict(counter)) # 사전 자료형으로 변환
      
      # 출력
      3
      1
      {'a': 2, 'b': 3, 'c': 1}

math

수학적인 기능을 포함하고 있는 라이브러리이다. 팩토리얼, 제곱근, 최대 공약수(GCD) 등을 계산해주는 기능을 포함한다.

  • factorial(x): x! 반환

    import math
    
     print(math.factorial(5)) # 출력: 120
    

  • sqrt(x): x의 제곱근 반환

    import math
    
     print(math.sqrt(7)) # 출력: 2.6457513110645907

  • gcd(a, b): a와 b의 최대 공약수 반환

    import math
     
     print(math.gcd(21, 14)) # 출력: 7

  • 파이(pi), 자연상수(e)

    import math
    
     print(math.pi) 
     print(math.e)
     
     # 출력 
     3.141592653589793
     2.718281828459045



해당 글은 다음 도서의 내용을 정리하고 참고한 글임을 밝힙니다.
나동빈, ⌜이것이 취업을 위한 코딩 테스트다 with 파이썬⌟, 한빛미디어, 2020, 604쪽
profile
IT, 개발 관련 정보들을 기록하는 장소입니다.
post-custom-banner

0개의 댓글