콘텐츠로 건너뛰기
Home » Development » Python » Page 14

Python

SublimeText Plugin 작성하기

SublimeText3 플러그인을 만들자.

서브라임텍스트3에서 작성하던 내용을 개인적으로 사용하는 위키(로컬에서 돌리고 있음)에 전송하는 기능을 서브라임 텍스트 플러그인으로 구현하고, 그 과정을 기록한다.

조건들

  • Sublime Text3의 스크립트 구동 언어는 Python3 버전이다.
  • 서브라임에서 제공하는 API를 사용하기위해서는 sublime 패키지가 필요하다.
  • 명령 클래스의 원형은 sublime_plugin 패키지에 정의되어 있다. 커스텀 플러그인은 이 클래스를 상속받아 작성하게 된다.
  • 현재 뷰(편집공간)는 이 클래스의 self.view 속성을 통해서 접근할 수 있다.
    더 보기 »SublimeText Plugin 작성하기

Swift는 정말 파이썬보다 빠를까?

애플은 Swift가 파이썬보다 몇 십배 빠르다고 주장하고 있는데, 실질적으로는 파이썬이 더 빠른 것 같이 느껴지는 (심지어 pypy도 아니고) 경우가 너무나 많다. 물론 “어떤 언어가 더 빠르냐”는 질문만큼 바보같은 것도 없긴한데, 개인적으로는 애플이 말하는 것과 반대인 것 같은 체감이 많아서 한 번 확인해보았다. 더 보기 »Swift는 정말 파이썬보다 빠를까?

순열 조합 제너레이터 구현하기

파이썬 기본 모듈인 itertools는 리스트와 같은 반복 가능한 객체에 대한 여러 연산을 위한 함수를 제공하는데, 특정한 원소들로 만들 수 있는 순열이나 조합을 구하는 함수들도 이 모듈에 포함되어 있다. 특정한 원소를 가지고 만들 수 있는 모든 순열은 itertools.permutations() 함수로, 모든 조합은 itertools.combinations() 함수로 만들 수 있다. 그 외에 중복을 포함하는 조합등을 생성하는 함수가 제공된다.

아주아주 예전에는 순열/조합을 생성하는 함수를 구현하는 것이 간단한 작업이 아니었는데, 제너레이터에서 다른 제너레이터로 결과 생성을 위임하는 yield from 문법이 생긴 이후에는 이를 아주 간단히 구현할 수가 있게 되었다. 그래서 오늘은 제너레이터를 이용해서 주어진 리스트나 튜플에서 순열 및 조합을 생성하는 제너레이터를 만드는 방법을 소개하고자 한다.

더 보기 »순열 조합 제너레이터 구현하기

퀵소트에 대해 알아보자

퀵소트는 정렬과 관련된 내용을 다룰 때 빠지지 않고 등장하는 알고리듬이다. 제자리 정렬로 구현할 수 있는 알고리듬 중에서는 가장 빠른 것으로 알려져 있다. (그래서 이름도 퀵 정렬) 평균적인 성능은 O(nlogn)이 나온다. 퀵소트의 원리는 간단히 말해서 데이터 중에서 기준이 되는 임의의 값 하나를 정하고 이를 보통 pivot이라 한다. 이제 다른 데이터들을 피봇과 비교하여 그보다 작은 값은 왼쪽으로, 큰 값은 오른쪽으로 옮겨준다.

더 보기 »퀵소트에 대해 알아보자

삽입정렬

삽입정렬(insertion sort)은 기본적인 제자리 정렬 알고리듬 중 하나로, 배열 내의 어떤 위치의 원소를 해당 배열의 가능한 가장 왼쪽 자리에 ‘삽입’하는 동작을 통해 정렬을 수행한다. 삽입 정렬의 이론적인 성능은 O_{(n^2)}이지만, 데이터가 정렬된 상태에 가깝다면 삽입 동작이 그 만큼 적게 일어나므로 더 빨라질 수 있다. 현실 세계의 데이터는 완전히 랜덤하기보다는 약간은 정렬된 경향을 가지므로 같은 O_{(n^2)}인 버블정렬 알고리듬보다는 더 빠르게 동작하는 것으로 알려져 있다.

더 보기 »삽입정렬

버블 정렬 (Bubble Sort)

버블정렬은 정렬 중에서 가장 기본적이고 쉬운 알고리듬이다. 버블정렬은 배열의 앞에서부터 큰 원소를 뒤쪽으로 보내는 작업을 반복적으로 시행하여 배열 전체를 정렬한다. 이 때 큰 값들이 물속에서 거품이 떠오르는 것처럼 움직이기 때문에 ‘버블’이라는 이름이 붙었다.

간단한 예를 통해서 버블 정렬이 어떻게 작동하는지 살펴보자. 아래와 같은 배열이 있다고 가정하자.

더 보기 »버블 정렬 (Bubble Sort)

파이썬 소켓서버 예제

간단한 소켓서버 구현예제. 여기서 send 하는 내용을 HTTP 규격에 맞춰서 보내면 웹 브라우저로 접속해서 볼 수 있게 된다. 웹서버를 직접 구현해보고자 한다면 출발점은 소켓서버 구현 -> HTTP 프로토콜 이해 -> 소켓서버를 웹서버로 확장하는 방식으로 발전시켜 나갈 수 있다. 하지만 파이썬에서는 이미 HTTP 서버 모듈도 존재하고 이는 꽤 쓸만하므로 따로 만드는 건 삽질이다. (뭐 좋은 경험은 될 수 있겠지만…) 더 보기 »파이썬 소켓서버 예제

이진탐색트리 (Binary Search Tree) 구현하기 – python

Binary Search Tree

이진 탐색 트리는 이진 트리 구조 속에 이진 탐색 알고리듬을 이용하여 키-값 쌍을 저장하는, 어찌보면 맵(혹은 사전이라고도 하는) 구조와 유사한 형태이다. 이진 탐색 자체가 데이터가 정렬된 상태를 전제하기 때문에, 구조 내에 자료를 삽입/삭제하는 과정이 단순하지는 않지만, 어떤 정렬된 상태의 키를 기준으로 데이터를 찾는데는 매우 유리한 구조이다.
이진 탐색 트리는 특정 노드가 어디에 위치하는데에는 크게 관심이 없다. 단지 이를 사용하여 효율적인 탐색을 할 수 있게 한다. 보면 알겠지만 해시테이블이 메모리 공간을 더 사용하고 반대급부로 성능을 얻는 것과는 달리, 이진 탐색 트리는 트리 구조 자체의 특성을 사용하므로 부가적인 메모리 공간의 낭비는 적다고 볼 수 있다.
더 보기 »이진탐색트리 (Binary Search Tree) 구현하기 – python