지수 표현 방식
e나 E 다음에 오는 수는 10의 지수부를 의미
ex) 1e9 = 10^9
ex) 1e-3 = 10^-3
실수형
컴퓨터 시스템은 실수 정보를 표현하는 정확도에 한계를 가짐
ex) 0.3 + 0.6를 0.9와 가깝게 표현하지만 미세한 오차 발생
이를 위해 round() 함수 이용할 수 있음
리스트
대괄호 안에 조건문과 반복문을 적용하여 리스트 초기화 가능
arr = [i for i in range(10)]
print(arr) # [0,1,2,3,4,5,6,7,8,9]
arr = [i for i in range(10) if i%2 == 1]
print(arr) # [1,3,5,7,9]
2차원 리스트 초기화
arr = [[0]*m for _ in range(n)]
아래와 같이 작성하면 리스트가 모두 같은 객체로 인식됨 (잘못된 방법)
arr = [[0]*m]*n
문자열 연산
문자열은 특정 인덱스의 값을 변경할 수 없음
집합 자료형
중복과 순서가 없음
합집합 : |
교집합 : &
차집합 : -
map
리스트의 모든 원소에 각각 특정한 함수를 적용할 때 사용
list(map(int, input().split()))
a, b, c = map(int, input().split())
빠르게 입력 받기
사용자로부터 입력을 최대한 빠르게 받아야 하는 경우에 사용
sys 라이브러리에 정의되어 있는 sys.stdin.readline() 함수 사용
입력 후 엔터가 줄 바꿈 기호로 입력되므로 rstrip() 메서드를 사용해야 함
import sys
data = sys.stdin.readline().rstrip()
표준 출력
기본적으로 출력 이후 줄바꿈을 수행하며, 원하지 않는 경우에는 end 속성을 통해 변경 가능
들여쓰기
4개의 공백 문자를 사용하는 것이 표준으로 설정됨
연산자
논리 : and, or, not
기타 : in, not in
pass
아무것도 처리하고 싶지 않을 때 사용
조건문 간소화
실행될 소스코드가 한 줄인 경우, 줄바꿈을 하지 않고도 표현 가능
if a > 5: b = "success"
else: b = "fail"
if ~ else문을 한줄에 작성할 수 있음
b = 'success' if a > 5 else 'fail'
조건문 내 부등식
수학의 부등식을 그대로 사용할 수 있음
ex) if x>0 and x<5 -> if 0<x<5
인자(argument) vs 매개변수(parameter)
인자 : 호출할 때 넣는 값
매개변수 : 전달받고자 하는 값
global
지역 변수를 만들지 않고, 함수 바깥에 선언된 변수를 바로 참조함
함수 내부에 지역변수가 존재한다면, 지역변수를 우선으로 참조함
람다 표현식
함수를 간단하게 한줄에 작성 가능
def add(a, b):
return a+b
print(add(1,2))
# 람다 표현식
print((lambda a, b: a + b)(1,2))
내장 함수에서 주로 사용됨
리스트의 두번째 속성 값을 이용해서 정렬 가능
arr = [('a', 5), ('b', 3), ('c',7)]
def arr_key(x):
return x[1]
print(sorted(arr, key=arr_key))
print(sorted(arr, key=lambda x:x[1]))
여러개의 리스트에 하나의 함수를 적용하고자 할 때 사용가능
list1 = [1,2,3,4,5]
list2 = [6,7,8,9,10]
res = map(lambda x,y:x+y, list1, list2)
print(list(res)) # [7,9,11,13,15]
라이브러리
내장함수 : 기본 입출력 함수부터 정렬함수까지 기본 함수 제공, import 없이 사용 가능
itertools : 반복되는 형태 데이터 처리, 순열과 조합
heapq : 힙 자료구조 제공, 큐 기능 구현
bisect : 이진탐색 기능
collections : 덱, 카운터 등
math : 필수 수학적 기능 제공
eval() : "" 사이 계산 결과 반환
sorted() : 정렬, reverse 옵션
- itertools
순열 : 서로 다른 n개에서 서로 다른 r개를 선택, 순서 고려, nPr (permutation)
조합 : 서로 다른 n개에서 순서 상관없이 서로 다른 r개 선택, nCr (combination)
from itertools import permutations
from itertools import combinations
from itertools import product
from itertools import combinations_with_replacement
data = ['a', 'b', 'c']
res1 = list(permutations(data, 3)) # 순열, 모든 경우의 수
res2 = list(combinations(data, 2)) # 조합, 2개를 뽑는 조합
res3 = list(product(data, repeat=2)) # 중복순열, 2개를 뽑는 순열
res4 = list(combinations_with_replacement(data, 2)) # 중복조합, 2개를 뽑는 조합
- collections
등장 횟수를 세는 기능 제공
반복 가능한 객체가 주어졌을 때 내부의 원소가 몇번씩 등장했는지 알려줌
from collections import Counter
counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'red'])
print(counter['blue']) # 2
print(dict(counter)) # {'red':3, 'blue':2, 'green':1}
- math
최대공약수 : 공통된 약수 중 가장 큰 수
최소공배수 : 공통된 배수 중 가장 작은 수
gcd() : 최대공약수
최소공배수는 두 수의 곱을 최대공약수로 나누어서 구할 수 있음
import math
# 최소 공배수
def lcm(a, b):
return a*b // math.gcd(a, b)
a = 20
b = 14
print(math.gcd(a,b)) # 최대공약수(gcd)
print(lcm(a,b)) # 최소공배수(lcm)