지극히 개인적인 공부 노트/파이썬(Python) 14

[Python] 비선형 자료구조 - 우선순위 큐와 힙(feat. heapq 라이브러리)

우선순위 큐란, 우선순위가 높은 원소가 먼저 출력되는 추상적 자료형을 의미한다. 비선형 구조를 갖는 자료구조인데, 배열이나 연결 리스트로도 구현할 수 있지만 출력과 원소를 찾고 삭제하는 과정 등이 비효율적이기 때문에, 보통은 힙(Heap)을 통해 구현한다. 그리고 파이썬에서는 heapq 라이브러리를 이용해서 힙의 연산을 이용할 수 있다. 1. 힙(Heap) 우선, 힙이란 완전 이진 트리(Complete Binary Tree)이고, 모든 노드에 저장된 값들은 자식 노드들의 값보다 작거나 같다. 여기서 값의 크기가 작을수록 큰 우선순위를 부여하는 것이라고 생각하면 된다. 즉, 배열을 정렬했을 때 기본적으로 오름차순 정렬되는 것처럼 일반적인 힙에서는 루트 노드(우선순위가 가장 높은 노드)가 값이 가장 작다. ..

[Python] 비선형 자료구조 - 트리(Tree)

자료구조는 선형 구조와 비선형 구조로 나눌 수 있다. 자료구조 중 대표적인 비선형 구조로는 그래프가 있다. 이 글에는 자료구조 그래프의 특수한 형태 중 하나인 트리에 대해 간단하게 정리했다. 트리의 장점 중 하나는 자료에 대한 삽입, 삭제, 탐색 등의 연산이 다른 자료구조에 비해 유리한 경우가 많다는 점이다. 이진 탐색 트리를 이용하면 아래와 같이 정렬된 상태를 유지하는 배열보다 시간 복잡도가 유리하다. 삽입 삭제 탐색 정렬된 배열 O(N) O(N) O(logN) 이진 탐색 트리 O(logN) O(logN) O(logN) 1. 그래프와 트리 1) 그래프 정점(vertex)과 간선(edge)으로 이루어져 있는 자료구조 (1) 정점(vertex): 자료, 상태 등 무언가를 담고 있는 요소. 노드라고도 표현함..

[Python] 선형 자료구조 - 스택(Stack)과 큐(Queue)

자료구조는 선형 구조와 비선형 구조로 나눌 수 있다. 선형 구조는 자료들이 순서를 가지고 있는 연속된 자료구조를 뜻한다. 선형 구조를 갖는 대표적인 자료구조는 스택(Stack)과 큐(Queue)가 있는데, 이 글은 이 둘에 대한 개념과 구조, 구현 소스 코드 등을 정리했다. 1. 스택(Stack) 한쪽 끝에서만 자료를 넣고 뺄 수 있는 자료구조로써, 후입선출, LIFO(Last In First Out) 등의 성격을 갖는다. 배열, 연결 리스트 등의 자료구조로 구현할 수 있으며, 파이썬의 리스트도 거의 스택과 비슷한 방식으로 동작한다. push, pop, size, empty, top 등의 연산을 구현할 수 있으며 이를 구현한 코드와 다른 책을 참조한 소스 코드는 각각 아래 링크에 있다. 1) 간단하게 구..

[Python] 기초적인 자료구조(feat. 배열, 연결 리스트)

우선, 자료구조란 자료를 저장하는 방법과 자료에 적용할 수 있는 연산을 구체적으로 제공하는 형태를 의미한다. 자료구조는 추상적 자료형(자료와 그 자료에 대한 연산을 개념적으로 정의만 한 것)을 구체적으로 구현한 결과라고 표현할 수도 있다. 즉, 리스트(파이썬의 자료 type 중 리스트와는 다름), 스택, 큐, 트리 등의 명칭과 그 구조의 개념은 추상적 자료형에 속하고, 이를 실제로 사용할 수 있도록 모듈, 클래스 등을 통해 구현한 것 또는 이를 구현하는 도구가 되는 것(배열, 연결 리스트 등)을 자료구조라고 생각하면 된다. 이 글에는 대표적인 자료구조(배열, 연결 리스트)의 구조 개념, 장단점과 함께 이를 구현한 코드를 정리했다. 1. 배열(Array) 배열은 절대적인 순서에서 인덱스(위치)를 통해 조회..

[Python] 간단하게 정리한 클래스와 상속

프로그래밍과 언어를 배우고 그 안으로 들어가다 보면 '객체 지향', '클래스' 등의 단어를 접하게 된다. 객체 지향은 말 그대로 여러 요소와 데이터 등을 객체로써 취급하고 구분하고 사용하는 것을 지향한다는 의미이다. 내가 이해한 바로는 쉽게 말해 코드 속 여러 요소들을 명확한 레고 블록으로 만들고, 각각의 블록을 잘 쌓아서 견고하게 코드를 완성해나가는 것이다. 그리고 레고 블록을 선명하게 구분되고, 안정적인 각진 모습으로 구현하는 과정 속엔 클래스가 주요하다. 1. 클래스 클래스의 구성 요소와 관련 주요 개념을 정리해보면 다음과 같다. 1) 클래스: 어떤 데이터가 있는지, 어떤 조작을 할 수 있는지, 어떤 제약 조건들이 있는지 등을 명시한 추상적인 설계도 2) 인스턴스: 클래스로 만든 실제 예시. 클래스..

[Python] 함수와 메서드의 차이

지금까지 파이썬을 공부하면서 함수(function)와 메서드(method)에 대해 정확히 구별하지 못했다. 어느 정도 둘의 개념은 파악하고 있었지만, 거의 같은 용어라고 생각하면서 공부하고, 생각하며, 기록했다. 이 글에서는 파이썬 강의 자료의 일부를 통해 정리했다. 1. 함수(function) 함수란, 특정 기능을 수행하는 코드 또는 코드의 모임이다. 아래 사진은 질리도록 봐온 대표적인 함수의 개념도이다. 대표적인 파이썬 함수로 len(), int(), str() 등의 함수가 있다. 2. 메서드(method) 반면, 메서드는 특정 자료에 대해 특정 기능을 하는 코드를 의미한다. 여기서 함수와 구별되는 점은 '특정 자료 형태'에서 구현된다는 점이다. 예를 들어 아래 코드처럼 리스트 자료형에 적용할 수 있..

[Python] 변수 이름 짓는 방법

8월 3일부터 '스타트업 청년인재 이어드림' 프로젝트 교육을 본격적으로 받기 시작했다. 우선, 교육 내용은 첫 시간이기 때문에 파이썬에 대한 아주 기초적인 부분부터 배웠다. 지금까지 파이썬이 다른 언어보단 익숙하고, 자주 사용했기 때문에 크게 어려움은 없었다. 하지만 변수 이름을 지으면서 간혹 헷갈리거나 궁금한 부분이 있었는데, 이 강의에서 확실하게 정리해준 강의 자료가 있어서 블로그에 남긴다. 변수 이름 짓는 방법 1. 변수 이름이 숫자로 시작하면 안 된다. 2. 숫자로만 구성된 변수 이름 금지 3. 파이썬 문법에서 사용되는 예약어( ex) if, for, while 등 ) 사용 금지 4. 공백 문자( ), 연산자(+, -, %, * 등) 사용 금지

[Python] 다차원 리스트 생성 시 유의할 점

최근 파이썬을 통해 백준 알고리즘 문제를 풀이하던 중, 리스트로 2차원, 3차원 형태를 만들어야 하는 부분이 있었다. 재귀 함수를 통해 원소 하나하나씩 값을 구하고, 해당 리스트에 저장해야 했다. 나는 아래와 같은 방식으로 리스트를 생성하고, 값을 저장했다. val = [[[0] * 2] * 2] * 2 val[0][0][1] = 7 이를 프롬프트로 진행했을 때, 위와 같은 결과가 되었다. 슬라이싱을 한 적도, 값을 여러 개 지정하려던 의도도 없었는데, 마치 슬라이싱으로 값을 수정한 것처럼 각 리스트의 1번째 원소가 모조리 저장되었다. 솔직히 이전에도 종종 이런 경우가 있었고, 그때마다 결국 그냥 리스트 인덱싱이 아닌, append 함수나 딕셔너리 타입 등을 이용해서 문제를 해결했다. 그러던 중 우연히 ..

[Python] 매우 기초적인 Python 크롤링하는 법(feat. 간단한 DB 설명)

1. 크롤링이란? '크롤링'은 정의하자면 검색 엔진(네이버, 구글 등) 로봇을 통해 데이터를 수집하는 방법을 의미합니다. 흔히 개인이 포털 사이트에서 검색을 통해 확인할 수 있는 정보를 퍼오는 행위인 '스크랩핑' 또한 크롤링이라고 부르기도 합니다. 2. 크롤링 하는 법 코딩을 통해 크롤링을 하기 위해선 2가지 핵심 요소가 있습니다. 첫 번째는 원하는 페이지의 HTML을 요청하는 것, 두 번째는 요청을 통해 가져온 HTML 중 필요한 데이터만을 잘 골라내는 것입니다. 이를 파이썬에서 성공적으로 진행하기 위해선 먼저 임포트(import) 해야 하는 라이브러리가 있습니다. 임포트 할 라이브러리는 requests, beautifulsoup가 있으며 다음과 같이 입력하면 임포트 할 수 있습니다. import re..

[Python] 정규표현식

정규표현식이란, 특정한 문자의 규칙을 찾고 가공하는 방법을 의미합니다. 파이썬뿐만 아니라 C, C++, 자바 등에서 표준 라이브러리로 제공하고 있다는 점에서 굉장히 널리 사용되는 표현법이기도 합니다. 1. 모듈 정규표현식 모듈의 이름은 're'입니다. 정규표현식의 메서드를 사용하기 전에 우선 정규표현식 모듈을 임포트해야 합니다. import re 2. 메서드 1) match - 해당 문자열의 가장 처음부터 원하는 패턴의 문자열을 찾는 명령입니다. 문자열을 찾은 후, group() 함수를 함께 사용해야 패턴에 해당되는 문자열이 반환됩니다. - 사용법 re.match(패턴, 패턴을 찾을 문자열) - 단, 가장 처음부터 원하는 패턴을 찾기 때문에 패턴이 문자열 중간에 있다면 찾지 못하고 오류가 발생합니다. ※..