Skip to content
This repository has been archived by the owner on Mar 18, 2024. It is now read-only.

Latest commit

 

History

History
107 lines (81 loc) · 6.18 KB

🍯 코드를 줄여줄 꿀 라이브러리 모음.md

File metadata and controls

107 lines (81 loc) · 6.18 KB

🍯 코드를 줄여줄 꿀 라이브러리 모음

itertools .permutations() .combinations()

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

    itertools.permutations(iterable, r=None) # 순열 튜플들 반환
    itertools.combinations(iterable, r) # 조합 튜플들 반환

sys.setrecursionlimit()

  • 파이썬의 기본 재귀 깊이 제한은 1000밖에 되지 않고, 이를 초과하면 런타임에러 가 발생한다.
  • 따라서 파이썬 재귀 문제 풀이시 아래와 같이 재귀 깊이 제한을 풀어주어야한다.
    sys.setrecursionlimit(10**6)

functools.cmp_to_key()

  • sorted()같은 정렬 함수의 key 매개변수로 비교 함수(comparison function)를 사용할 수 있게 한다.
  • 비교함수는 우선순위가 높은게 앞에 있으면 -1, 같으면 0, 우선순위가 낮은게 앞에있으면 1을 리턴하는 함수이다.
  • 정의한 비교 함수를 cmp_to_key()의 인자로 넣으면, 반복해서 두 요소를 선택하고 우선순위를 비교하여 1 리턴시 두 요소의 위치를 바꾼다.
  • result = sorted(src, key=functools.cmp_to_key(xy_compare))

heapq

  • heapq는 이진트리 기반 최소 힙 자료구조를 제공하여 최대, 최솟값을 반복해서 구해야할 때 유용하다.
  • 최대 힙으로 사용하는 방법은, 값을 넣을 때 -1을 곱하여 우선순위를 매기는 것이다.

    ex 5(-5,5)로 푸시하면, 튜플의 앞 인덱스를 우선으로 정렬하므로 -5로 우선순위를 판단한다.

  • from heapq import heappush, heappop, heapify
    
    heap = [] # 새로운 heap은 그냥 리스트로 만들면 된다.
    heappush(heap, 5)
    heappop(heap) # 5
    
    heap = heapify([2,3,6]) # 기존 배열을 사용하려면 heapify()

functools.reduce()

  • 데이터를 순회하며 원하는 형태의 누적 값을 만들 수 있다.
  • reduce(집계함수, 순회 가능한 데이터, 초기값 option ) 의 형태이다.
  • # numbers의 모든 값을 더하는 코드. acc는 누적된 값, cur는 현재 값이다.
    total = reduce(lambda acc, cur: acc + cur, numbers, 0)

collections.defaultdict(), collections.Counter()

  • collections는 다양한 데이터 구조(list, tuple, dict 등)의 확장된 기능을 주기 위해 제작된 파이썬 내장 모듈이다.

    • defaultdict는 존재하지 않는 키를 조회할 경우, 에러 메시지를 출력하는 대신 디폴트 값을 기준으로 해당 키에 대한 딕셔너리 아이템을 생성해준다.

    • 딕셔너리라면 KeyError가 발생하겠지만, defaultdict 객체는 에러 없이 바로 +1 연산이 가능하고, 이 경우 디폴트인 0을 기준으로 자동으로 생성한 후 여기에 1을 더해 최종적으로 1이 만들어진다. 이외에도 defaultdict(list)와 같은 형태로 특정 key가 딕셔너리에 있는지 확인하지 않는 숏코딩 역시 가능하게 한다.

      from collections import defaultdict
      
      >>>from collections import defaultdict
      >>>a = defaultdict(int)
      >>>a['A'] = 5
      >>>a['B'] = 4
      >>>a
      defaultdict(<class 'int'>, {'A': 5, 'B': 4}) 
      
      >>>a['C'] += 1
      >>>a
      defaultdict(<class 'int'>, {'A': 5, 'B': 4, 'C': 1})
      
      >>>b = defaultdict(list)
      >>>b['A'].append(1)
      >>>b['B'].append(2)
      >>>b
      defaultdict(<class 'list'>, {'A': [1], 'B': [2]})
    • Counter는 중복된 데이터가 저장된 배열을 인자로 넘기면 각 원소가 몇 번씩 나오는지 저장된 객체를 얻게 된다.

        from collections import Counter
      
         >>>Counter(["jamin", "dain", "dain", "jamin", "hyucksoon"])
         Coumter({'jamin':2, 'dain':2, 'hyucksoon':1})
      
         >>>Counter("jamin")
         Counter({'j':1, 'a':1, 'm':1, 'i':1, 'n':1})
      
         #most_common() -> 오름차순 정렬!
         data = [1, 2, 3, 1, 2, 3, 1, 2, 1, 1, 2]
         counter = Counter(data)
      
         print(counter.most_common())
         출력: [(1, 5), (2, 4), (3, 2)]
      
         print(counter.most_common(1))
         출력: [(1, 5)]