반응형

프로그래밍 언어/Python 11

[Python] split 함수

[Python] split 함수 URL: https://www.acmicpc.net/problem/1439 위의 문제를 풀고 나서 다른 사람의 풀이를 봤는데 split 함수를 너무 잘 사용해서 따로 기록하려 한다. split 함수를 떠올리는 기본적인 상황 >>> phone_number = '010-1234-5678' >>> phone_number.split('-') ['010', '1234', '5678'] 위와 같이 특정 구분자(-, , 등)를 기준으로 문자열을 잘라야 할 때(?) split 함수를 떠올렸었다. 위의 상황 말고 다른 상황에서도 split 함수를 유용하게 사용할 수 있다. 위의 백준 문제에선 아래와 같이 split 함..

[Python] GIL(Global Interpreter Lock) 정리

[Python] GIL(Global Interpreter Lock) 정리 CPython 메모리 관리 방법 CPython은 reference의 개수를 세는 방법으로 메모리를 관리한다. sys.getrefcount 라는 함수를 이용해서 Python이 세고 있는 객체의 reference 개수를 확인할 수 있다. # 출처: realpython.com >>> import sys >>> a = [] >>> b = a >>> sys.getrefcount(a) 3 a가 처음 만들어짐 -> reference 1개 b에 a의 reference 할당 -> reference 2개 sys.getrefcount 함수에 argument로 a가 들어가서, 이 함수 내부에서 a의 reference 개수를 하나 늘림 -> referen..

[Python] generator(제너레이터) 정리

[Python] generator(제너레이터) 정리 Generator Generator(제너레이터): iterator 를 생성해 주는 함수 iterator : next() 메서드를 이용해 데이터에 순차적으로 접근이 가능한 객체 generator 는 일반적인 함수와 비슷해보이지만, 가장 큰 차이점은 yield 라는 구문일 것이다. 아래의 예시를 보자 def generator(n): i = 0 while i < n: yield i i += 1일반 함수와의 차이는 yield 밖에 없다. yield는 무엇인가? yield 는 generator가 일반 함수와 구분되는 가장 핵심적인 부분이다. 일반적인 함수의 경우, 사용이 종료되면 결과 값을 호출부로 반환한 뒤 함수 자체를 종료시킨 후 메모리 상에서 정리(clea..

[Python] bisect (이진 탐색)

[Python] bisect (이진 탐색) bisect 라이브러리는 '정렬된 배열'에서 특정한 원소를 찾아야 할 때 매우 효과적으로 사용된다. bisect의 두 가지 메서드 bisect_left(a, x): 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 왼쪽 인덱스를 찾는 메서드 bisect_right(a, x): 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 오른쪽 인덱스를 찾는 메서드 예시 예를 들어 정렬된 리스트 a = [1, 2, 4, 4, 8]이 있을 때, 새롭게 데이터 4를 삽입하려 한다고 가정하자. 이때 bisect_left(a, 4)와 bisect_right(a, 4)는 각각 인덱스 값으로 2와 4를 반환한다. 소스코드 예시 from bisec..

[Python] heapq (최소힙, 최대힙)

[Python] heapq (최소힙 & 우선순위 큐) 파이썬의 힙은 최소 힙으로 구성되어 있고 단순히 원소를 힙에 전부 넣었다가 빼는 것만으로도 시간 복잡도 O(NlogN)에 오름차순 정렬이 완료된다. heapq 내부 메서드 heapq.heappush(): 원소 삽입 heapq.heappop() : 원소 꺼내기 heapq 예시 # 힙 정렬을 heapq로 구현하는 예제 import heapq def heapsort(iterable): h = [] result = [] # 모든 원소를 차례대로 힙에 삽입 for value in iterable: heapq.heappush(h, value) # 힙에 삽입된 모든 원소를 차례대로 꺼내어 담기 for i in range(len(h)): result.append(h..

[Python] permutations & combinations (순열과 조합)

[Python] permutations & combinations (순열과 조합) itertools: 파이썬에서 반복되는 데이터를 처리하는 기능을 포함한 라이브러리 코테에서 유용한 클래스 2가지 permutations(순열) combinations(조합) permutations 예시 >>> from itertools import permutations >>> data = ['a', 'b', 'c'] >>> result = list(permutations(data, 3)) >>> print(result) [('a', 'b', 'c'), ('a', 'c', 'b'), ('b..

[Python] sorted() 다중조건으로 정렬하는 방법

[Python] sorted() 다중조건으로 정렬하는 방법 2018 KAKAO BLIND RECRUITMENT - [3차] 방금그곡 문제에 정렬을 해야 하는 부분이 있는데, sorted함수 안에서 itemgetter를 사용하여 해결하려했습니다. 그러나 원하는대로 작동하지 않아, 결국 itemgetter를 쓰지 않고 다른 방법으로 해당 코드를 변경하여 풀었습니다. 이 기회에 sorted() 함수를 간략하게 정리하려 합니다. 예제 >>> a = [(1,3), (0,3), (1,4), (1,5), (0,1), (2,4)] >>> b = sorted(e, key=lambda x: x[0]) >>> b [(0, 3), (0, 1), (1, 3), (1, 4), (1, 5), (2, 4)] # 기본 동작은 오름차순..

[Python] deque 사용법

[Python] deque 사용법 deque는 스택과 큐의 기능을 모두 가진 놈이다. deque 생성 예제 >>> from collections import deque # 문자열로 큐 만들기 >>> q = deque('milhouse') >>> q deque(['m','i','l','h','o','u','s','e']) # 빈 큐 만들기 >>> q1 = deque() # 원소가 있는 큐 만들기 >>> q2 = deque([1,2,3]) # 큐 최대 길이 명시하여 큐 만들기 >>> q3 = deque(maxlen = 5) >>> q4 = deque([1,2,3], maxlen =..

반응형