자료형
수 자료형
- e나 E를 이용한 지수 표현 방식. e 다음에 오는 수는 10의 지수부를 의미함.

- 컴퓨터는 실수를 처리할 때 정확도가 떨어지기 때문에 round() 함수를 이용하여 소수점을 특정 자릿수에서 반올림하여 표현할 수 있음.
a = 0.3+0.6 print(a) #0.8999999999999999 x = round(5.76543, 2) #첫 번째 인자는 실수형 데이터, 두 번째 인자는 (반올림하고자 하는 위치 -1) print(x) #5.77
- (/) - 나누기, (%) - 나머지, (//) - 몫
리스트 자료형
- 모든 값이 0인 1차원 리스트 초기화하는 소스코드.
n = 10 a = [0] * n print(a) #[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
- indexing - 인덱스값을 입력하여 리스트의 특정한 원소에 접근하는 것. 파이썬의 인덱스값은 양수, 음수를 사용할 수 있으며, 음수를 넣으면 거꾸로 탐색하게 됨.
- slicing - 리스트에서 연속적인 위치를 갖는 원소를 가져와야 할 때 사용. 대괄호에 (:)를 넣어 사용함. 끝 인덱스의 경우 1을 뺀 값의 인덱스까지 처리.
a = [1,2,3,4,5] print(a[1:3]) #[2, 3]
- list comprehension - []안에 조건문과 반복문을 넣는 방식으로 리스트를 초기화 함. 특히, 2차원 배열을 초기화할 때 효과적임.
array = [i for i in range(20) if i%2 == 1] print(array) #[1, 3, 5, 7, 9, 11, 13, 15, 17, 19] n = 3 m = 4 array = [[0]*m for _ in range(n)] print(array) #[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
반복을 수행하되 반복을 위한 변수 값을 무시하고자 할땐 언더바를 사용함.

- not in 을 사용하여 배열의 특정 값을 제거 할 수 있음.
a = [1,2,3,4,5,5,5] remove_set = {3, 5} result = [i for i in a if i not in remove_set] print(result) #[1, 2, 4]
문자열 자료형
변수를 선언할 때 큰따옴표나 작은따옴표를 이용한다.
튜플 자료형
튜플 자료형은 리스트와 거의 비슷한데 차이는 다음과 같음.
- 한 번 선언된 값을 변경할 수 없음.
- 리스트는 대괄호를 이용하지만, 튜플은 소괄호를 이용함.
a = (1, 2, 3, 4) a[2] = 7 #에러 발생. 대입 불가능
사전 자료형
- key, value 쌍을 데이터로 가짐. 내부적으로 해시 테이블을 이용하므로 O(1)의 시간에 처리함.
- keys()함수와 values()함수를 통해 key, value 데이터를 뽑을 수 있음.
data = dict() data['사과'] = 'apple' data['바나나'] = 'banana' print(data) key_list = data.keys() value_list = data.values() print(key_list) print(value_list) for key in key_list: print(data[key]) #{'사과': 'apple', '바나나': 'banana'} #dict_keys(['사과', '바나나']) #dict_values(['apple', 'banana']) #apple #banana
집합 자료형
집합은 리스트, 문자열을 이용하여 만드는데, 다음과 같은 특징이 있음.
- 중복을 허용하지 않음.
- 순서가 없음.
#set()함수 또는 중괄호로 중복 제거 가능 data = set([1,1,2,3,4,4,5]) print(data) data = {1,1,2,3,4,4,5} print(data) #{1, 2, 3, 4, 5}
- 합집합|, 교집합 &, 차집합 -
- 데이터 값을 추가할 땐 add(), 한꺼번에 여러 개의 값을 추가할 땐 update(), 데이터 제거 시 remove() 사용 가능. 모두 시간 복잡도 O(1).
조건문
- if ~ elif ~ else로 사용함.
score = 85 if score >= 70: print('성적이 우수합니다')

- in 연산자, not in 연산자를 제공함.
a = [1,2,3,4,5,5,5] remove_set = {3,5} result = [i for i in a if i not in remove_set] print(result)
- 파이썬 내에서 부등식은 x>0 and x<20이 아닌 0<x<20으로 표현하는 게 가능함.
반복문
while문과 for문으로 반복문 표현 가능. 특히 for문은 수를 차례대로 나열할 때 range()를 사용함. 하나의 값만 넣으면 자동으로 시작값은 0을, 두자리를 넣으면 시작 값과 끝 값을 지정할 수 있음.
scores = [90, 75, 77, 65, 97] cheating_list = {2, 4} for i in range(5): if i+1 in cheating_list: continue if scores[i] >= 80: print(i+1, "번 학생은 합격") #1 번 학생은 합격 #5 번 학생은 합격
함수
def를 이용하여 함수를 정의할 수 있음. 또한 람다 표현식으로 간단하게 함수를 정의할 수 있음.
def add(a,b): return a+b print(add(3,7)) print((lambda a, b: a+b)(3,7))
입출력
#입력을 받을 수 있음. list(map(int, input().split())) import sys sys.stdin.readline().rstrip()
f-string 문법
문자열 앞에 f를 붙여 단순히 변수를 중괄호 안에 넣어 출력할 수 있음. 파이썬은 str() 등 자료형으로 변환을 해야 문자열과 정수를 넣을 수 있지만 f-string을 사용하면 별도의 전환이 없어도 됨.
answer = 7 print(f"정답은 {answer} 입니다.")
주요 라이브러리 문법과 유의점
표준 라이브러리 - 특정한 프로그래밍 언어에서 자주 사용되는 표준 소스코드를 미리 구현해 놓은 라이브러리.
내장 함수
별도의 import 명령어 없이 바로 사용할 수 있음.
- input(), print(), sum(), min(), max(), eval(), sorted(), sort()
itertools
반복되는 데이터를 처리하는 기능을 포함.
- permutations - r개의 데이터를 뽑아 일렬로 나열하는 모든 경우를 계산함.
from itertools import permutations data = ['A', 'B', 'C'] result = list(permutations(data,2)) print(result) #[('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
- product - r개의 데이터를 중복으로 뽑아 일렬로 나열하는 모든 경우를 계산.
from itertools import product data = ['A', 'B', 'C'] result = list(product(data,repeat=2)) print(result) #[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]
- combinations - r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우를 계산.
from itertools import combinations data = ['A', 'B', 'C'] result = list(combinations(data,2)) print(result) #[('A', 'B'), ('A', 'C'), ('B', 'C')]
- combinations_with_replacement - r개의 데이터를 중복으로 뽑아 순서를 고려하지 않고 나열하는 모든 경우를 계산.
from itertools import combinations_with_replacement data = ['A', 'B', 'C'] result = list(combinations_with_replacement(data,2)) print(result) #[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]
permutations와 product는 순서를 고려해서, combinations와 combinations_with_replacement는 순서를 고려하지 않고 나열함.
heapq
heap(Priority Queue와 같이 우선 순위가 존재하는 자료구조)을 위해 고안됨. 파이썬에서 최대, 최소값을 찾을 때 O(log n)으로 성능이 좋음.
- heapq.heappush() - heap에 원소 삽입.
- heapq.heappop() - heap에 원소 제거.
#Max heap 구하는 방법 import heapq list = [2,6,9,4,7,1] heap = [] result = [] for item in list: heapq.heappush(heap, -item) while heap: result.append(-heapq.heappop(heap)) print(result) #[9, 7, 6, 4, 2, 1]
bisect
이진 탐색에 사용. 정렬된 배열에서 특정한 원소를 찾아야 할 때 효과적. O(log n)
- bisect_left(a, x) - 정렬된 순서를 유지하며 리스트 a에 데이터 x를 삽입할 가장 왼쪽 인덱스를 찾는 메서드.
- bisect_right(a, x) -정렬된 순서를 유지하며 리스트 a에 데이터 x를 삽입할 가장 오른쪽 인덱스를 찾는 메서드.
인덱스 값을 반환함.
#값이 특정 범위에 속하는 원소의 개수 구하기 from bisect import bisect_left, bisect_right def count_by_range(a, left_value, right_value): left_index = bisect_left(a, left_value) right_index = bisect_right(a, right_value) return right_index - left_index a = [1,2,3,3,3,3,4,4,8,9] # 값이 4인 데이터 개수 출력 print(count_by_range(a,4,4)) # 값이 [-1, 3] 범위에 있는 데이터 개수 출력 print(count_by_range(a,-1,3)) #2 #6
collections
유용한 자료구조를 제공하는 표준 라이브러리
- deque - 큐를 구현함. 연속적으로 나열된 데이터의 시작 부분과 끝에 데이터를 삽입, 삭제할 때 효과적임.
from collections import deque data = deque([2,3,4]) data.appendleft(1) data.append(5) print(data) #deque([1, 2, 3, 4, 5]) print(list(data)) #[1, 2, 3, 4, 5]
- Counter - 등장 횟수를 세는 기능 제공.
from collections import Counter a = Counter(['red', 'blue', 'red','green']) print(a['red']) #2 print(dict(a)) #{'red': 2, 'blue': 1, 'green': 1}
math
수학적인 기능을 포함한 라이브러리. 팩토리얼, 제곱근, 최대공약수 등을 계산.
import math #팩토리얼 print(math.factorial(5)) #120 #제곱근 print(math.sqrt(5)) #2.23606797749979 #최대공약수 print(math.gcd(21, 14)) #7