본문 바로가기

반응형

Computer/Python

(57)
Mutable Default Arguments 파이썬은 굉장히 직관적인 언어입니다. 상대적으로 간단한 문법과 범용성으로 다양한 분야에서 많은 사람들이 사용하고 있지만 놓치기 쉬운 가벼운 실수들이 있습니다. 이번 포스트에서 살펴볼 것은 함수 정의에서 리스트 등의 가변 변수가 디폴트 값으로 설정되었을 때 발생하는 현상입니다. 다음과 같은 함수를 작성했을 때, def append_to(element, to=[]): to.append(element) return to my_list = append_to(12) print(my_list) my_other_list = append(42) print(my_list) 우리가 기대하는 실행 결과는 'append_to' 함수가 호출되었을 때마다 'to' argument의 새로운 리스트가 생성되어 [12], [42] 가..
Pycharm 설치 Pycharm은 체코 회사 JetBrains 에서 개발된 파이썬 언어를 위한 거의 모든 기능을 갖춘 통합 개발 환경 (IDE, Integrated Development Environment) 로서 가상환경 (virtual env), Console, Jupyter Notebook, 시스템 에뮬레이터 (Terminal) 을 지원합니다. Community Edition과 Professional version이 존재하며 community edition만 무료로 사용할 수 있습니다. (참고로 Professional version은 개인이 사용하려면 월 $89 가 필요하며 오래 구독할 수록 구독료가 감소합니다.) Pycharm 다운로드 공식 홈페이지에서 Pycharm을 다운받습니다. 이때 community edit..
itertools 모듈 이번 포스트에서는 파이썬의 itertools 내장 모듈에 대해 알아보려고 합니다. itertools는 효율적인 반복을 위한 반복기 빌딩 블록을 generator를 이용한 iterator 형태로 구성하여 빠르고 효율적으로 메모리를 사용할 수 있습니다. itertools 모듈의 자주 쓰이고 중요한 메소드에 대해 알아보겠습니다. 무한 이터레이터 무한으로 반복할 수 있는 메소드입니다. 보통 여기에 속하는 메소드들은 종료 조건을 파라미터로 따로 명시합니다. count(start=0, step=0) 끝나는 지점이 정해지지 않은 range 라 생각하면 편합니다. start와 step만 인수로 주어지기 때문에, 길이가 정해진 다른 리스트와 보통 같이 사용합니다. cycle() 주어진 인자에서 요소를 반환하면서 요소의 ..
collections 모듈 (5) - deque deque는 double-ended queue의 약자로 일반 리스트와 달리 양방향에서 처리할 수 있는 queue 자료구조입니다. 리스트처럼 맨 뒤에 자료를 추가할 수 있고 맨 앞에도 자료를 추가할 수 있습니다. 특히, 맨 앞의 자료를 추가하거나 삭제할 때, 리스트는 각 원소를 복사해야되므로 $O(n)$의 시간 복잡도가 소요되지만 deque에서는 상수 시간 복잡도 $O(1)$이 소요됩니다. deque 생성 deque 생성 시에는 maxlen이란 파라미터를 지정할 수 있어 deque의 최대 크기를 지정할 수 있습니다. 최대 크기를 넘어갈 때에는 맨 앞의 원소가 삭제되면서 큐를 전체적으로 앞으로 이동합니다. appendleft(), popleft(), extendleft() deque는 맨 앞에 원소에 대한 ..
collections 모듈 (4) - defaultdict defaultdict는 딕셔너리의 하위 클래스로 딕셔너리와의 차이점은 defaultdict는 키 값이 존재하지 않을 때 초기값이 자동으로 세팅된다는 점입니다. 일반 딕셔너리는 키 값이 존재하지 않는다면 KeyError를 일으킵니다. 이 초기값의 경우 defaultdict를 어떻게 설정하느냐에 따라 달라집니다. int의 경우 0, list의 경우 빈 리스트가 존재하지 않는 키 값에 대해 자동으로 세팅됩니다. 리스트 초기값을 리스트로 처리할 경우 존재하지 않는 키에 대해서도 리스트 연산을 수행할 수 있습니다. 세트 초기값을 세트로 처리할 경우 존재하지 않는 키에 대해서 세트 연산을 수행할 수 있습니다. 함수 초기값을 함수로 할 수도 있습니다. 홍머스 정리 딕셔너리와 거의 같다. 키가 없는 경우에도 KeyEr..
collections 모듈 (3) - OrderedDict OrderedDict는 dict의 하위 클래스로서 입력 순서가 유지되는 딕셔너리입니다. 파이썬 3.6이전에는 딕셔너리의 입력 순서가 유지되지 않고 인터프리터를 실행시킬 때마다 내부의 random seed가 달라져 순서가 삽입 순서가 유지됮 않았지만 파이썬 3.7부터 입력 순서가 보존되도록 동작이 개선되었습니다. OrderedDict OrderedDict는 삽입 순서를 유지하기 위해 연결 리스트로 내부를 구성합니다. 딕셔너리의 하위 클래스이므로 딕셔너리가 지원하는 대부분의 메소드를 지원합니다. pop(key) pop()은 딕셔너리에서 해당 키 원소를 제거합니다. OrderedDict는 순서를 유지하므로 중간의 키 값을 제거하여도 나머지 키 순서가 그대로 유지됩니다. move_to_end(key, last=..
collections 모듈 (2) - Counter Counter는 주어진 리스트, 문자열 등의 원소의 빈도 값을 "원소:빈도수"로 return하는 dict의 하위 클래스입니다. 빈도 수를 셀 일이 있을 때 사용하면 매우 유용합니다. Counter 메소드 Counter에는 다음과 같이 리스트, 문자열, 튜플 등의 자료형에서 동일한 값의 자료가 얼마인지 파악하는데 사용됩니다. elements() 인스턴스 요소의 개수를 카운터 개수만큼 보여줍니다. most_common(n) most_common 메소드는 굉장히 유용합니다. 자주 등장하는 최빈값을 (key, value)의 튜플로 묶어 리스트로 return합니다. 이 때, 파라미터로 들어가는 n 값을 통해 return되는 원소의 개수를 조절할 수 있습니다. subtract() 두 개의 Counter 객체에서 값..
collections 모듈 (1) - namedtuple 이번 포스트에서는 collections 파이썬 내장 모듈에 대해 알아보겠습니다. collections 모듈은 다양한 데이터 컨테이너 타입을 지원하는 모듈로 tuple, dict 와 같은 기존 데이터 타입의 확장된 타입을 지원하거나 추상화된 컨테이너 타입 또한 지원합니다. 이번 포스트에서는 collections 모듈에서 자주 쓰이는 컨테이너 타입인 namedtuple에 대해 알아보겠습니다. namedtuple namedtuple은 tuple의 subclass로서 tuple의 불변성과 클래스의 접근성을 동시에 갖춰 다양한 접근법을 지원하는 타입입니다. 공식문서 예제를 통해 한 번 살펴보고 namedtuple의 메소드들에 대해 알아보겠습니다. namedtuple 선언 시 ['x', 'y']로 하였지만 'x y..

반응형