ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python 3 문법 02
    Algorithm 2020. 8. 24. 01:48

    Python3 표준 라이브러리

     

    내장 함수 : print(), input() 같은 기본 입출력, sorted 같은 정렬 기능 포함.

    • sum (list)→ 리스트같은 iterable 객체(리스트, 튜블, 사전) 가 입력으로 주어 졌을 때 모든 원소의 합.
    • min (list)→ 리스트같은 iterable 객체가 입력으로 주어 졌을 때 가장 작은 값.
    • max (list)→ 리스트같은 iterable 객체가 입력으로 주어 졌을 때 가장 큰 값
    • eval (list)→ 리스트같은 iterable 객체가 입력으로 주어 졌을 때 평균 값
    • sorted (list) → 리스트같은 iterable 객체가 입력으로 주어 졌을 때 객체를 정렬. dict경우 key 값으로 정렬 reverse로 역순정렬
    • iterable 객체는 기본으로 sort() method 포함

    itertools : python에서 반복 되는 형태의 데이터를 처리하는 기능, 순열과 조합을 제공

    • permutations : 순열 구할 때 사용.
    • combinations : 조합 구할 때 사용.
    • product : permutations와 같이 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)을 계산한다.  뽑고자 하는 데이터의 수를 repeat 속성값으로 넣어준다. 중복 순열 가능.
    • combinations_with_replacement : product와 비슷 .중복 조합 가능
    from itertools import permutations
    from itertools import combinations
    from itertools import product
    
    
    result = list(permutation(data, 3)) 
    result = list(combination(data, 2))
    result = list(product(data, repeat=2))
    result = list(combinations_with_replacement(data, 2))

     

     

    heapq : heap 기능을 제공하는 라이브러리. 우선순위 큐를 구현하기 위해 사용

    다익스트라 최단 경로 알고리즘을 포함해 다양한 알고리즘에서 우선순위 큐를 구현하고자 할때 사용.

    python의 heap은 min heap으로 구성되어 있으므로 단순히 원소를 힙에 전부 넣었다가 빼는 것만 으로도 O(nlogn)에 오름차순 정렬이 완료 된다. 보통 최소 힙 자료구조의 최상단 원소는 항상 가장 작은 원소이기 때문이다.

    heap에 원소를 삽입할 때는 heapq.heappush(), 원소를 꺼낼 때는 heapq.heappop()

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

     

    bisect : 이진 탐색기능을 제공

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

    bisect_left(), bisect_right() method를 가장 중요하게 사용하며 두 method 모두 O(nlogn)에서 동작.

    bisect_left(a, x) : 정렬된 순서를 유지하면서 list a에 value x를 삽입할 가장 왼쪽 인덱스를 찾는 method

    bisect_right(a,x) : 정렬된 순서를 유지하도록 list a에 value x를 삽힙할 가장 오른쪽 인덱스를 찾는 method

    from bisect import bisect_left, bisect_right
    
    a = [1,2,4,4,8]
    x = 4
    
    print(bisect_left(a,x))
    #2
    print(bisect_right(a,x))
    #4
    
    from bisect import bisect_left, bisect_right
    
    #값이 left, right인 데이터의 개수를 반환하는 함수.
    
    def count_by_range(a, left_value, right_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]
    
    print(count_by_range(a,4,4))
    #값이 4인 data 개수 출력 2
    print(count_by_range(a,-1,3))
    #값이 [-1,3] 범위에 있는 데이터 개수 출력 6

    collections : deque, counter 등의 유용한 자료구조를 포함.

    deque를 사용하여 queue를 구현한다. 기존 list 자료형은 data 삽입, 삭제 등의 기능 제공. 그러나 append, remove 모두 맨 뒤의 인덱스를 기준으로 수행. 앞의 원소를 처리할때 O(N)의 시간 소요

      List Deque
    가장 앞쪽에 원소 추가 O(N) O(1)
    가장 뒤쪽에 원소 추가 O(1) O(1)
    가장 앞쪽에 있는 원소 제거 O(N) O(1)
    가장 뒤쪽에 있는 원소 제거 O(1) O(1)

    단 deque에서는 indexing, slicing을 기능 사용할수 없음.

    연속적으로 나열된 데이터의 시작 부분이나 끝부분에 데이터를 삽입하거나 삭제 할때 매우 유용.

    popleft() : 첫 번째 원소 제거

    pop() : 마지막 원소 제거

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

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

    from collections import deque
    
    data = deque([2,3,4])
    data.appendleft(1)
    data.append(5)
    
    print(data)
    #1, 2, 3, 4, 5

    Counter : 등장 횟수를 세능 기능을 제공. list와 같은 iterable 객체가 주어졌을 때, 해당 객체 내부의 원소가 몇 번씩 등장했는지를 알려준다.

    from collections import Counter
    
    counter = Counter(['red','red','blue','green','blue','red'])
    
    print(counter['blue'])
    # 2
    print(dict(counter))
    # {'red':3, 'blue':2, 'green':1}
    

     

    math :  필수적인 수학적 기능을 제공하는 라이브러리, factorial, 제곱근, gcd, 삼각함수 등.

    import math
    
    print(math.factorial(5))
    #120
    print(math.sqrt(4))
    #2 sprt → 제곱근, 루트.
    print(math.gcd(21,14))
    #7

    'Algorithm' 카테고리의 다른 글

    이진탐색  (0) 2020.08.30
    정렬  (0) 2020.08.26
    DFS & BFS  (0) 2020.08.25
    Data Clustering Algorithm  (0) 2020.08.24
    Python 3 기초 문법  (0) 2020.08.23
Designed by Tistory.