빠른 입출력
import sys
# 빠른 입력
input = sys.stdin.readline
data = input().rstrip()
# 빠른 출력
print = sys.stdout.write
문자열 포매팅
# 문자열 포매팅
s = f"문자열 {값}"
정렬
[Python] f-string 포맷팅2 (2,8,16 진수, 1000단위 쉼표, 정렬, 문자채우기)
print(f"{bin(b)[2:]:>04s}") # 오른쪽 정렬 4칸 0 채우기
삼항 연산자
[python] 파이썬 삼항 연산자 (if ~ else ~)
[True] 일때 값 if condition else [False]일 때 값
람다식
파이썬 코딩 도장: 32.1 람다 표현식으로 함수 만들기
lambda x : x + 10 # 매개변수 O
lambda: 0 # 매개변수 X
다중 조건 정렬
[python] List(2) list sorting : 다중 조건 정렬 & 백준 1181번[단어 정렬]
lectures.sort(key = lambda lecture : (lecture[0], lecture[1])
힙
[Python] 힙 자료구조 / 힙큐(heapq) / 파이썬에서 heapq 모듈 사용하기
기본적으로 최소힙의 형태로 정렬되어있다.
힙 함수
heapq.heappush(heap, item)
: item을 heap에 저장heapq.heappop(heap)
: 가장 작은 원소를 pop & 리턴. 비어있는 경우 IndexError 호출heapq.heapify(x)
: 리스트 x를 heap으로 변환
import heapq
pq = []
heapq.heappush(heap, 50)
heapq.heappush(heap, 10)
heapq.heappush(heap, 20)
heap2 = [50, 10, 20]
heap.heapify(heap2)
# 최솟값 확인
print(pq[0])
# 응용 최대 힙
maxHeap = []
heapq.heappush(heap, (-item, item))
pass, continue, break
[Python] pass, continue, break 차이점 알아보기
문자열 반복
COS Pro 2급 파이썬: 7.3 문자열을 연결하고 반복하기
# 문자열 반복
'str' * 3
유니코드 ↔ 문자 변환
Python string을 char로 바꾸는 법 feat. 대소문자 변환
s = "123123"
for s in str:
# 문자을 아스키 코드로 변환
print(ord(s))
# 아스키 값을 문자로 변환
chr(65)
defaultdict
[파이썬 기초] 유사 딕셔너리 defaultdict() 활용법
from collections import defaultdict
# dict와 달리 키 값이 없으면 defaultdict의 callable 매개변수가 동작하여 해당 값으로 초기화
int_dict = defaultdict(int)
print(int_dict['a']) # 0
max_dict = defaultdict(lambda: sys.maxsize)
print(max_dict['a']) # 9223372036854775808
list_dict = defaultdict(list)
print(list_dict['a']) # []
비트연산자
[ 파이썬 python ] 비트 연산을 위해 알아야 할 것들
num = 13
# bin()으로 감싸면 이진수 형태의 문자열이 된다.
print(bin(num)) # 이진수로 출력
# bitcount
print(bin(num).count('1'))
비트 마스킹
반올림
파이썬 round 함수의 오류 (2.5가 2가되는 마법 - 사사오입과 오사오입)
은행가의 반올림 (Banker's rounding) - ThinkCUBES
[Python] round 함수 : 반올림 (3) - 사사오입 반올림을 사용하는 방법
우리가 일반적으로 쓰는 반올림은 5이상에서 올리고, 5미만에서 버리는 사사오입이다. 하지만, 파이썬의 round
함수는 5미만에서 버리고, 5초과에서 올리는 오사오입이다. 5의 경우 앞자리가 홀수인 경우에 올림을 하고 짝수인 경우에 버림을 하여 짝수로 만들어준다.
오사오입을 왜 써?
쉽게 말해서 10개의 숫자 중 6개의 숫자를 올리고 4개의 숫자를 버리는 것은 공평하지 않다는 것이다. 숫자가 중요한 금융권, 공학, 자연과학 계열에서 많이 사용한다.
파이썬에서 오사오입을 사용하려면 사용자 지정 round
함수를 구현해서 사용해야 한다.
구현에는 3가지 방법이 있다.
1. decimal 모듈 사용
이 때 주의할 점은 round 함수에 매개변수를 하나만 넣으면 decimal 모듈을 써서 반올림 모드를 변경해도 사사오입이 적용되지 않는다는 점이다.
import decimal
# 산술 연산을 위한 환경 불러옴
context = decimal.getcontext()
# 반올림 방식을 사사오입으로 변경
# 오사오입은 decimal.ROUND_HALF_EVEN
context.rounding = decimal.ROUND_HALF_UP
# 양의 정수
round(decimal.Decimal('50'), -2)
# 음의 정수
round(decimal.Decimal('-5'), -1)
# 양의 소수
round(decimal.Decimal('0.5'), 0)
# 음의 소수
round(decimal.Decimal('-0.5'), 0)
2. 미세한 값을 더해주고 round() 사용
가장 편해서 자주 사용한다.
반올림해야하는 값이 0.xxx5라고 할 때 0.00001과 같이 해당 값에 영향을 줄 수 있는 가장 큰 값을 선택해서 더해주면 되는 것 같다.
a = 0.5
round(a + 0.0000001)
3. 직접 구현
def round_up(num, digits=0):
return round(val+10**(-len(str(num))-1, digits)
파일 입력받기
[백준] Python-input.txt로 입력 받기! -공룡 루디
f = open("a.txt", "rt") # 텍스트를 읽기
input = f.readline
N, M = map(int, input().rstrip())
for-else와 while-else
N = int(input())
for i in range(100):
if i == N:
break
else: # 모든 loop 다 돌면 출력
print("done")
실행시간 측정
[Python] Python 코드 실행시간 측정 4가지 방법 (feat. Jupyter Notebook)
import time
import datetime # 시간 예쁘게 출력
start = time.time()
do_something()
end = time.time()
# 출력 -> 00:00:0x.xxxx sec
print(f"{str(datetime.timedelta(seconds = end - start)) sec}")
시간 조작
https://ctkim.tistory.com/entry/파이썬-datetime-라이브러리-가장-많이-사용하는-함수
any(), all() 함수
temp = [0, 2, 4, 8, 16]
if any(t > 0 for t in temp):
print("a", end=" ")
if all(t % 2 == 0 for t in temp):
print("b")
# 실행 결과 : a b
리스트(+셋, 딕셔너리) 컴프리헨션
https://bio-info.tistory.com/28
# 리스트 컴프리헨션
numbers = [i for i in range(1, 10)]
# 실행결과 : [1, 2, 3, 4, 5, 6, 7, 8, 9]
# if 조건문 사용
even_numbers = [i for i in range(1, 10) if i % 2 == 0]
# 실행결과 : [2, 4, 6, 8]
# if - else 조건문 사용
is_odd_number = [True if i % 2 == 1 else False for i in range(10)]
# 실행 결과 : [False, True, False, True, False, True, False, True, False, True]
# 셋 컴프리헨션
odd_numbers = {i for i in range(10) if i % 2 == 1}
# 실행 결과 : {1, 3, 5, 7, 9}
# 딕셔너리 컴프리헨션
chars_dict = {chr(i): i for i in range(65, 91)}
"""
실행결과 :
{'A': 65, 'B': 66, 'C': 67, 'D': 68, 'E': 69, 'F': 70, 'G': 71, 'H': 72, 'I': 73, 'J': 74, 'K': 75, 'L': 76, 'M': 77, 'N': 78, 'O': 79, 'P': 80, 'Q': 81, 'R': 82, 'S': 83, 'T': 84, 'U': 85, 'V': 86, 'W': 87, 'X': 88, 'Y': 89, 'Z': 90}
"""