Python 3.8부터 바다코끼리 연산자 (:=)가 도입되었습니다. 저도 최근에 알게 된, 매우 생소한 연산자입니다. 간단히 말해, 할당과 반환을 동시에 하는 연산자입니다. 개념과 목적, 예시를 알아보겠습니다. Contents 1. 개념 변수 := 표현식 작동하는 방식은 표현식의 결과를 변수에 할당하고, 동시에 반환합니다. 즉, 변수 = 표현식을 하고, return 변수 기능을 합니다. 2. 목적 할당과 반환을 동시에 함으로써, 코드량을 줄일 수 있습니다. 즉, 코드량이 줄어들면서 가독성이 높아지는 효과로 볼 수 있습니다. 3. 예시 1) 기초 예시 ## 1번 코드 -> 일반 코드 s='walrus eat kimchi' ## s에 문자열을 할당 result = 'walrus' in s ## 'walrus..
이번엔 Python을 이용해 현재 시간을 여러 형식으로 출력하는 방법을 알아보겠습니다. time 라이브러리의 strftime 메서드를 사용해서 간단하게 현재 시간을 나타낼 수 있습니다. strftime 메서드는 datetime에서도 똑같이 사용하실 수 있습니다. Contents * 전체 코드 import time time.strftime('%Y.%m.%d - %H:%M:%S') # 년.월.일 - 시간 # Output : '2022.04.04 - 01:33:26' time.strftime('%y%m%d - %X') # 년월일 - 시간 # Output : '220404 - 01:35:57' time.strftime('%x %X') # 날짜 - 시간 # Output : '04/04/22 01:37:57' ti..
이번엔 백준 2800 괄호 제거 문제를 풀어보겠습니다. 주요 자료구조는 스택을 사용하며, 조합(combinations)을 이용해 풀어보겠습니다. 2800번: 괄호 제거 첫째 줄에 음이 아닌 정수로 이루어진 수식이 주어진다. 이 수식은 괄호가 올바르게 쳐져있다. 숫자, '+', '*', '-', '/', '(', ')'로만 이루어져 있다. 수식의 길이는 최대 200이고, 괄호 쌍은 적어도 1개 www.acmicpc.net Contents *전체 코드 from itertools import combinations problem = list(input()) # 문제 입력받는 리스트 p, brk_idx = [],[] # 괄호쌍 찾을 스택 -> p , 괄호쌍 인덱스 저장 이중리스트 -> brk_idx result..
Contents 이번엔 백준 12015 가잔 긴 증가하는 부분 수열 2 문제를 Python을 이용해 풀어보겠습니다. 12738 가장 긴 증가하는 부분 수열3 역시 아래와 풀이가 완전 동일합니다. * 12015 문제 링크 12015번: 가장 긴 증가하는 부분 수열 2 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000) www.acmicpc.net * 12738 문제 링크 12738번: 가장 긴 증가하는 부분 수열 3 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (-1,000,000,000 ≤ Ai ≤ 1..
이번엔 딕셔너리를 요소로 가지고 있는 리스트가 있을 때, 해당 리스트를 딕셔너리의 key값을 기준으로 정렬하는 방법에 대해 알아보겠습니다. Contents *전체 코드 li = [{'name':'Ace', 'age':87}, {'name':'Bella', 'age':10}] # name을 기준으로 사전순 정렬 print(sorted(li , key= lambda x: x['name'])) ## Output : [{'name': 'Ace', 'age': 87}, {'name': 'Bella', 'age': 10}] # name을 기준으로 사전 역순으로 정렬 print(sorted(li , key= lambda x: x['name'], reverse=True)) ## Output : [{'name': 'Ac..
Contents 이번엔 파이썬에서 두 리스트의 교집합을 순서를 유지 하여 구하는 간단한 코드를 보겠습니다. 1. 전체 코드 a = [1,2,3,4,5] b = [5,4,3] c = [3,4,5] [_ for _ in a if _ in c] # a순서 기준 # Output: [3, 4, 5] [_ for _ in b if _ in c] # b순서 기준 # Output: [5, 4, 3] 2. a 순서 기준 a = [1,2,3,4,5] c = [3,4,5] [_ for _ in a if _ in c] a 리스트 순서를 기준으로 해서, c 리스트와 교집합을 구하는 코드입니다. 리스트 컴프리핸션 내에서 _(언더바) 변수는 다른 변수와 겹치지 않고, 저 순간에만 간단히 사용함을 의미합니다. (리스트 컴프리핸션에 ..
주피터 노트북을 사용하다 보면, 비밀번호를 변경하거나, Nbextensions을 커스텀하여 사용하게 되는 경우가 있습니다. 이럴 때, 주피터 노트북의 환경파일들의 경로를 확인하는 방법을 알아보겠습니다. 1. jupyter 명령어 jupyter의 --paths 옵션을 사용하면 주피터 노트북이 참조하는 환경설정(config)파일들의 경로와 data파일의 경로들이 우선순위 순서로 출력됩니다. 각각 기능(config, data, runtime)별로 가장 위에 있는 경로에 들어가셔서 커스텀을 진행하면 됩니다. !jupyter --paths * 실행 결과 2. Jupyter 경로 저는 리눅스에서 주피터 노트북을 실행하고 있으므로, tree 명령어를 통해 cofig와 data 경로의 형태를 보겠습니다. 1) conf..
윈도우에서 주피터 노트북을 사용하다보면, 주피터 노트북이 시작될때 원하는 폴더에서 시작했으면 좋겠다고 불편을 많이 느꼈습니다. 오늘은 이 문제를 해결하는 방법을 소개하겠습니다. Contents 1. Jupyter notebook 또는 Anaconda Prompt를 실행 2. config 파일을 생성 명령어: jupyter notebook --generate-config --> 생성된 경로를 복사합니다. 1) jupyter notebook에서 생성 주피터 노트북에서 python을 실행하고, 셀에서 !jupyter notebook --generate-config를 실행합니다. 저는 생성위치가 C:\Users\user\.jupyter라고 나옵니다. 2) 1번이 안된다면, anaconda-prompt에서 생성 ..
파이썬을 사용하다 보면, 변수에 값을 동적으로 할당하고 싶을 때가 있습니다. 쉽게 말해, 파이썬의 문자열을 변수처럼 사용할 수 있다면, 자유롭게 값을 할당하고 다룰 수 있는 경우들이 있습니다. 이런 경우에 사용하는 것이 eval() 함수와 exec() 함수입니다. 이는 파이썬의 내장 함수로 따로 library 없이 사용할 수 있습니다. Contents eval() 함수 : '수식' 연산 기본적으로 문자열로 된 수식을 Input으로 받아 그 결과를 return 하는 함수입니다. eval('수식',globals=None, locals=None) ① '수식' : 여기에 문자열 형태로 표현식[ ex) 1+1 ]을 입력받습니다. (필요 값) ② globals : 선택적으로 쓰며, 사용하는 경우 변수: 값 형태의 ..
subprocess 라이브러리를 이용해 코드를 백그라운드로 실행하여 병렬 처리하는 방법을 알아보겠습니다. Contents 1. 배경 회사에서 리눅스서버위에서 작업 스케쥴러와 함께 대규모 파이프라인을 돌리는 경우가 생겼습니다. 문제는 한 번 분석을 시작할 때, 분석 샘플들을 종류에 따라 나누어, 작업 스케쥴러를 돌려 병렬 처리할 스크립트가 달라진다는 점이었습니다. 즉, 분석 자동화 스크립트가 돌아갈 때, 샘플들을 종류별로 나누어, 파이프라인을 돌릴 쉘 스크립트들을 작업 스케쥴러에 병렬적으로 넣고, 한 샘플에 대해 여러 작업으로 나뉘어, 스크립트들이 큐에 쌓입니다. cfDNA 샘플은 샘플당 작업 큐에 쌓이는 스크립트만 100개가 넘고, PBMC 샘플은 30~40개 정도 됩니다. 한 배치에는 cfDNA가 80..
python을 사용하다 보면 문자열이나 리스트에 대해, 각 항목이 몇 개로 이루어져 있는지 구하고 싶을 때가 있습니다. 딕셔너리를 이용해 코드를 짤 수도 있지만, collections 모듈의 Counter 클래스를 사용한다면 간단하게 구할 수 있습니다. Counter 클래스는 문자열이나 리스트 등의 배열 형태를 입력으로 받습니다. 1. 문자열 Counting from collections import Counter Counter('HelloWorld') # 출력: Counter({'l': 3, 'o': 2, 'H': 1, 'e': 1, 'W': 1, 'r': 1, 'd': 1}) Counter클래스에 문자열을 주면, 출력으로 각 문자가 몇 개나 나오는지 딕셔너리 형태로 출력해줍니다. 즉, Counter ..
안녕하세요! 이번엔 엑셀을 필터가 걸린 상태로 코드로 다루는 방법을 알아보겠습니다. 엑셀 작업을 하다 보면, 필터를 걸어 데이터를 정제하게 됩니다. 그리고, 그렇게 필터가 걸린 상태로 엑셀을 파이썬으로 읽고 싶은 경우가 있습니다. 예를 들어, 엑셀에서 데이터를 정제한 다량의 엑셀이 있고, 필터가 걸려있는 상태가 정제된 상태인 경우, 이런 다량의 엑셀을 취합하여 코드 작업을 해야 하는 경우유용합니다. * 코드만 필요하신 분을 위한, 필터 걸린 엑셀을 읽고 필터가 걸린 상태로 tsv로 쓰는 코드입니다. 입력: xlsx_name.xlsx 출력: output_name.tsv (필터 걸린 상태의 데이터만 tsv로 출력) from openpyxl import load_workbook xlsx_name = "입력 받..