본문 바로가기

python27

13. Extra Data Structure - 4, heapq 힙큐(heapq)는 우선순위 큐로서(priority queue), 우선순위를 가지는 아이템을 먼저 뽑을 수 있습니다. ex) a = [] heapq.heappush(a, 1) heapq.heappush(a, 3) heapq.heappush(a, 2) heapq.heappush(a, 4) print(a) print(heapq.heappop(a), heapq.heappop(a), heapq.heappop(a), heapq.heappop(a)) # 출력 값 # [1, 3, 2, 4] # 1 2 3 4 2021. 1. 13.
12. Extra Data Structure - 3, OrderedDict OrderedDict는 이름 그대로 순서가 있는 딕셔너리라고 생각하면 됩니다. 본인이 dictonary안의 값을 선언한 순서대로 값이 지정되는 특징을 가지고 있습니다. 다시 말하지만 키가 삽입되어 있는 순서를 기억하므로 중요하며, 추후 데이터 관리할 시 유용하게 활용됩니다. ex) from collections import OrderedDict a = OrderedDict() a['a'] = 1 a['b'] = 2 print(dict(a)) for i in a: print(i) # 출력 값 #{'a': 1, 'b': 2} #a #b 순서가 바뀌지 않으므로, 두 가지의 OrderedDict를 선언한 후 같은 키값, 다른 value를 주어서 활용할 수 있는 등 다양한 방식으로 응용이 가능합니다. 2021. 1. 13.
11. Extra Data Structure - 2, deque deque는 더블 엔디드 큐(double_ended_queue) 모듈으로서, 처음과 끝에서 값을 삽입하거나 삭제할 수 있습니다! 이는 특히 선입선출(FIFO) 큐를 만드는데 유용합니다. deque는 리스트의 시작 부분에서 아이템을 삽입 혹은 삭제할 시 빠른 속도를 가진다는 장점이 있습니다. .append() # 뒤에 추가 .appendleft() # 앞에 추가 .popleft() # 앞에서 제거 2021. 1. 13.
10. Extra Data Structure - 1, defaultdict, counter defaultdict는 collections라는 내장 dictionary에 포함되어 있습니다. 이는 함수 이름 그대로, default 값을 가진 dict를 자동으로 만들어 줍니다. ex) list_a = ['a', 'a', 'a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b', 'a', 'a', 'a', 'a', 'c', 'c', 'c', 'c', 'c', 'e', 'e', 'e', 'c', 'c', 'c'] from collections import defaultdict count = defaultdict(int) # count는 어떤 key값을 받을 때 자동적으로 value의 기본값을 int로 하게 됨 for word in list_a: count[word] += 1.. 2021. 1. 13.
9. python, 스레드(thread) c에서의 스레드는 병렬성을 의미합니다. 하지만 파이썬에서의 스레드는 동시성을 의미합니다. 따라서 속도에서의 향상을 기대하기는 어렵습니다. 그 이유는 바로 GIL(Global Interpreter Lock) 때문입니다. 예를 들어서 한 데이터를 가지고 3가지 방법으로 진행시켜 본다고 가정해 봅시다. 동시에 3곳에서 한 데이터를 접근하려고 하면 오류가 발생할 수 있기 때문에, GIL에서 이를 막고, 순차적으로 접근할 수 있도록 분배해주는 역할을 합니다. 즉, GIL이 한번에 한 스레드만 실행시키도록 하는 것이며, 속도를 높이는 기능을 하기에는 무리가 있습니다. ex) from threading import Tread class Test(Tread): def __init__(self): super(Test, .. 2021. 1. 13.
8. python, 파이썬에서의 병렬처리(subprocess) 병렬처리를 하는 것은 곧 프로그램 속도 향상의 지름길을 뜻합니다. 그 이유는 여러 작업을 동시에 하도록 만들어 주므로, 같은 시간 안에 더 많은 결과물을 얻어낼 수 있습니다. 파이썬에서 병렬처리를 하기 위해서는 subprocess를 이용하면 됩니다. 이는 어떤 프로그램을 실행시킬 때, 내가 사용하고 있는 파이썬 프로그램 아래에서 또다른 프로세스를 실행시키는 것입니다. ex) import subprocess proc = subprocess.Popen(['echo', 'Hello from child'], stdout=subprocess.PIPE, shell=True) # 윈도우 환경이라면 작성 out, err = proc.communicate() print(out.decode('utf-8')) 3줄: ech.. 2021. 1. 13.
7. python, 추상 클래스 파이썬에서도 추상 클래스, 추상 함수가 존재합니다. ex) from abc import ABCMeta, abstractmethod class AbstractTest(metaclass==ABCMeta): def __init__(self): pass @abstractmethod def run(self): 추상 클래스를 사용하고 싶다면 클래스 이름 앞에 abstract, 괄호 안에 metaclass==ABCMeta를 삽입하면 됩니다. 또한 @abstractmethod를 붙혀서 추상 함수를 만들 수 있습니다. 2021. 1. 13.
6. python, magic method 파이썬에서는 Initializer(__init__) 이외에도 이런 형식의 이름을 가진 메서드들이 많습니다. __del__ : del함수 사용하는 경우 __add__ : 두 개의 객체를 +로 더할때 사용됨 __sub__ : 두 개의 객체를 -로 뺄때 사용됨 __cmp__ : 두 개의 객체를 비교할 때 사용됨 __str__ : str함수 사용하는 경우 __enter__ : init 바로 다음에 실행되는 함수 __exit__ : 소멸자 ex) def __add__(self, other): width = self.width + other.width height = self.height + other.height return Rectangle(width=width, height=height) 2021. 1. 13.