python 194

[Python] 다중집합 교집합/합집합 구현

다중집합 수학에서 집합(set)은 어떤 조건을 만족시키는 서로 다른 대상의 모임으로, 집합 내 원소에 대해 중복을 허용하지 않는다. 반면 multiset(중복집합, 다중집합)은 각 원소를 어떤 기수만큼 중복하는 것을 허용하는 집합의 일반적인 개념이다. 원소가 중복된 횟수를 중복도(multiplicity)라고 하는데, 일반적인 집합은 각 원소의 중복도가 1인 중복집합이라고 생각할 수도 있다. 이 글에서는 Python으로 중복집합의 교집합과 합집합 연산을 구현한 코드를 정리한다. 프로그래머스 - [1차] 뉴스 클러스터링 문제 맞다……. 교집합 아래와 같은 중복집합 A, B가 있다고 할 때, a = [1, 2, 2, 3, 4, 5] b = [1, 1, 2, 3, 4, 6] 두 중복집합 A, B의 교집합은 [1..

Python 2023.10.25

[Python] PriorityQueue 사용

개요 2023.10.20 - [자료구조] 우선순위 큐 (Priority Queue)에서 우선순위 큐에 대해 살펴보았는데, 이 글에서는 Python에서 우선순위 큐를 제공하는 Priority Queue 클래스를 사용하는 방법을 정리해두려고 한다. Python queue.PriorityQueue는 내부적으로 heapq로 구현되어 있다. 클래스 임포트 PriorityQueue 클래스를 사용할 때는 아래와 같이 임포트 하여 사용할 수 있다. queue는 내장 모듈이므로 추가적인 라이브러리 설치는 필요하지 않다. from queue import PriorityQueue 선언 생성자를 사용하여 PriorityQueue를 선언한다. 큐의 최대 크기가 정해져 있다면 maxsize로 크기를 전달할 수있다. 큐의 크기에 ..

Python 2023.10.23

[Python] deque 사용

개요 2021.10.07 - [자료 구조] 회문 찾기 / 큐 & 스택에서 collections.deque을 이용해 Python으로 큐를 사용하는 방법을 간단히 적어두었다. 실제로 deque는 큐를 구현한 것 아니라 양방향 큐를 구현한 것으로, 종종 deque를 단방향으로 사용하여 큐로 취급하는 것 같다. 이 글에서는 deque 클래스를 사용하는 방법을 간단히 적어둔다. deque에 대한 개념은 2023.10.18 - [자료구조] deque - 양방향 큐에 정리해 두었다. 클래스 임포트 deque 클래스를 사용할 때는 아래와 같이 임포트 하여 사용할 수 있다. collections는 내장 모듈이므로 추가적인 라이브러리 설치는 필요하지 않다. from collections import deque 선언 생성자..

Python 2023.10.19

[Python] Asterisk(*)

Asterisk Python 코드를 찾아보면 Asterisk(*)를 사용하는 모습을 많이 볼 수 있는데, Python에서 Asterisk는 곱셉 연산 외의 여러 기능을 제공한다. 이 글에서는 Asterisk로 어떤 연산을 할 수 있는지 정리해 둔다. 곱셉, 거듭제곱 Python에서 Asterisk는 곱셈 연산을 할 때 사용할 수 있다. 또 Asterisk를 연달아 사용해(**) 거듭제곱 연산을 할 수 있기도 하다. 2 * 3 2 ** 3 interable 데이터 반복 리스트와 같은 반복 가능한 데이터를 반복적으로 확장하는 용도로 사용할 수 있다. print([i for i in range(3)] * 2) print((1, 2, 3) * 2) interable 데이터 unpacking 함수 호출 시 매개변..

Python 2023.10.17

[Python] Counter - 데이터 수 확인

개요 평소 어떤 리스트 내 원소가 나타난 수를 셀 때 다음과 같은 방식으로 셌었는데, Python의 Counter 클래스를 사용하면 편하게 데이터의 수를 셀 수 있다고 한다. tangerine = [1, 3, 2, 5, 4, 5, 2, 3] for i in tangerine: if i not in t_group: t_group[i] = 0 t_group[i] += 1 사용방법을 정리해 둔다. Counter 란 사용하고자 하는 클래스는 collections 모듈의 Counter 클래스로, 해시 가능한 객체를 카운트하기 위한 딕셔너리 하위 클래스이다. 원소가 키(key)고, 원소의 개수가 값(value)인 딕셔너리로 저장된다. 값에는 0과 음수를 포함한 모든 정수가 허용된다. 임포트 추가 패키지 설치 없이 ..

Python 2023.10.10

[Python] re - 정규표현식 일치 부분을 대문자로 변환하기

개요 정규표현식과 일치한 문자열은 대문자로 변환하고자 한다. 정규표현식에 대소문자 변환 기능을 가진 메타문자 \u, \U, \l, \L 등이 존재하지만, Python에서는 유니코드 패턴으로 인식되어 동작하지 않는 것 같다. 대안을 적어둔다. 방법 검색할 정규식 패턴에 그룹화를 사용하여, lamdba를 이용해 해당 그룹에 대해 upper 함수를 적용하면 된다. 굳이 lambda를 사용하지 않고 대문자 변환 함수를 정의하여 re.sub의 repl 매개변수로 넘겨도 된다. 아래는 소문자로 시작하거나, 공백과 소문자 조합인 문자를 대문자로 변환하는 코드이다. import re def Jaden_Case(s): return re.sub(r'(^|\b)([a-z])', lambda x: x.group().upper..

Python 2023.09.06

[Python] Celery 란

Celery 방대한 양의 메시지를 처리할 수 있는 분산 작업 큐(Distributed Task Queue). 분산 메시지 전달을 기반으로 하는 비동기 작업 큐라고 정의하기도 한다. Celery는 간단하고(simple), 유연하고(flexible), 안정적이며(reliable), Task 스케쥴링을 지원하되 실시간 처리에 중점을 두고 있다. Python 동시성 프로그래밍에서 많이 사용한다. Celery 자체는 Python으로 작성되어 있지만 프로토콜은 모든 언어로 구현할 수 있다. Task Queue 개념 스레드 또는 machine 간에 Task를 분산하는 메커니즘으로 사용된다. Task Queue는 Task라고 불리는 작업 단위를 입력으로 받는다. Celery의 클라이언트가 큐에 추가한 메시지는 brok..

Python 2023.08.25

[Python] enumerate 함수

개요 보통 Python에서 리스트에 대한 for문을 수행할 때는 아래와 같이 사용한다. message = ['Continue', 'Switching Protocol', 'Processing', 'Early Hints'] for msg in message: print(msg) 만약 index를 이용해 리스트에 저장된 원소를 접근해야 할 때는 다음과 같이 사용했었다. message = ['Continue', 'Switching Protocol', 'Processing', 'Early Hints'] for i in range(len(message)): print(i, message[i]) 다만 range를 이용해 접근하는 방식은 Pythonic 하지 않은 방법이라고 한다. 이 글에서는 Pythonic 하게 리..

Python 2023.08.24

[Python] pipdeptree - 패키지 의존성 확인

pipdeptree Python 환경에 설치되어 있는 패키지와 그 버전을 확인할 때는 pip list, pip freeze 명령을 사용하곤 한다. pip list pip freeze 간단히 패키지 정보를 확인하기엔 충분하지만 패키지 간의 의존성 등에서 충돌이 발생했을 때는 정보가 부족한 감이 있다. 이럴 때 패키지 간 의존성을 tree 형식으로 표시하는 pipdeptree를 사용하면 좋다. 설치 간단히 pip 명령을 이용해 설치할 수 있다. pip install pipdeptree 사용법 1. 환경 내 모든 패키지 의존성 확인 옵션 없이 사용하면 모든 라이브러리에 대한 의존성 tree를 출력한다. pipdeptree 위의 사진을 통해 launchpadlib라는 패키지는 httplib2, keyring, ..

Python 2023.08.22

[Pandas] DataFrame CROSS JOIN

CROSS JOIN CROSS JOIN은 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 것을 뜻하며, 두 테이블의 각 행의 개수를 곱한 만큼의 결과가 나온다. Pandas DataFrame을 join 하는 법은 2022.12.25 - [Python] Pandas - 데이터프레임 합성 1 (merge / join)에서 살펴보았는데, cross join에 대해서는 정리하지 않아서 추가로 정리한다. pandas 1.2 이상의 버전인 경우 위의 예시 그림처럼 hair type과 hair style 두 개의 DataFrame이 있다고 하자. import pandas as pd import numpy as np hair_type = pd.DataFrame({'Hair Type' : ['A', 'B'..