a = 1e9
print(a) # 1000000000.0 (10억)
a = 75.25e1
print(a) # 752.5
a = 3954e-3
print(a) # 3.954
a = 0.3 + 0.6
print(a)
if a == 0.9:
print(True)
else:
print(False) #False 출력
a = 0.3 + 0.6
print(round(a, 4)) # 소수점 다섯째자리에서 반올림(소수점 넷째자리까지 나타냄) 코테에서 주로 소수점 다섯째자리에서 반올림하라 한다.
if round(a, 4) == 0.9:
print(True) #True 출력
else:
print(False)
n = 10
a = [0] * n
print(a)
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[1:4]) # 인덱스 1부터 인덱스 3까지 (인덱스 1이상 4미만)
array = [i for i in range(20) if i % 2 == 1]
print(array)
위와 동일한 코드array = []
for i in range(20):
if i % 2 == 1:
array.append(i)
print(array)
array = [i * i for i in range(1, 10)]
print(array)
n = 3
m = 4
array = [[0]*m for _ in range(n)]
print(array)
2차원 리스트를 초기화 할 때 쓰면 안되는 코드 n = 3
m = 4
array = [[0] * m] * n
print(array)
# [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
#문제 발생 지점
array[1][1] = 5
print(array)
# [[0, 5, 0, 0], [0, 5, 0, 0], [0, 5, 0, 0]]
#의도와는 다른 결과가 나옴(내부적으로 포함된 3개의 리스트가 모두 동일한 객체에 대한 3개의 레퍼런스로 인식된다.)
a = [1, 2, 3, 4, 5, 5, 5, 5]
remove_set = {3, 5}
result = [i for i in a if i not in remove_set] # 조건부 표현식
print(result)
data = "Hello'g' World"
print(data) # Hello'g' World 출력
data = 'Hello "g" World'
print(data) #Hello "g" World 출력
data = "hdd\"dd\'e"
print(data) # hdd\"dd\'e 출력
a = "String"
print(a*3) # StringStringString 출력
a = "ABCDEF"
print(a[2]) # 인덱싱
print(a[2:4]) # 슬라이싱
튜플은 한 번 선언된 값을 변경할 수 없다.
리스트는 대괄호[]를 사용하지만, 튜플은 소괄호()를 활용한다.
a = (1, 2, 3, 4)
print(a) # (1, 2, 3, 4) 출력
print(a[3]) # 4 출력
a[2] = 5 # 튜플은 값을 변경할 수 없다. 에러 메세지 발생
data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'banana'
data['코코넛'] = 'coconut'
print(data)
data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
data['코코넛'] = 'Coconut'
if '사과' in data:
print("'사과'를 키로 가지는 데이터가 존재합니다")
data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
data['코코넛'] = 'Coconut'
key_list = data.keys()
print(key_list) # dict_keys(['사과', '바나나', '코코넛']) 출력
data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
data['코코넛'] = 'Coconut'
value_list = data.values()
print(value_list) # dict_values(['Apple', 'Banana', 'Coconut'])
data = set([1, 1, 2, 3, 4, 5, 5])
print(data) # {1, 2, 3, 4, 5} 출력
data = {1, 1, 2, 3, 4, 5}
print(data) # {1, 2, 3, 4, 5} 출력
a = set([1, 2, 3, 4, 5])
b = set([3, 4, 5, 6, 7])
print(a|b) # 합집합 {1, 2, 3, 4, 5, 6, 7}
print(a&b) # 교집합 {3, 4, 5}
print(a-b) # 차집합 {1, 2}
data = set([1, 2, 3])
data.add(5)
print(data) # {1, 2, 3, 5}
data = set([1, 2, 3])
data.update([5, 5, 6, 7])
print(data) # {1, 2, 3, 5, 6, 7}
data = set([1, 2, 3])
data.remove(3)
print(data) # {1, 2}
[조건문]
score = 85
if score >= 80:
pass
else:
print('성적이 80점 미만입니다.')
print("프로그램을 종료합니다.")
score = 85
if score >= 80: result = "Success"
else: result = "Fail"
score = 85
result = "Success" if score >= 85 else "Fail"
[반복문]
list1 = [1, 2, 3]
for i in list1:
print(i)
string = "stringgg"
for i in string:
print(i)
tup = (1, 2, 3, 4, 5)
for i in tup:
print(i)
for i in range(1, 5):
print(i) # 1, 2, 3, 4 출력
for i in range(5): # ..리스트나 튜플의 원소를 첫 번째 인덱스부터 방문할 때 사용
print(i) # 0, 1, 2, 3, 4 출력
[함수]
def add(a, b):
print('함수의 결과:', a + b)
add(b = 3, a = 7) # 인자 a와 b를 각 각 지칭해서 값을 넣는다.
# 이 경우 매개변수의 순서가 달라도 상관이 없다.
a = 0
def func():
global a
a += 1
for _ in range(10):
func()
print(a) # 10출력
print((lambda a, b : a + b)(2, 5)) # 7출력
[입출력]
입력
input() : 한 줄의 ‘문자열’을 입력 받음 (ENTER키가 입력될 때 까지)
input().split() : 한줄로 입력 받은 문자열을 공백을 기준으로 나눈 리스트로 바꿈
map(int, input().split()) : input().split()의 모든 원소들에 int()함수를 적용시킨다.
list(map(int, input().split()) : 문자열을 띄어쓰기로 구분하여 숫자형 자료형의 리스트로 변환
구분자가 줄바꿈(ENTER)이면 int(intput())을 활용하는 것이 바람직하다
구분자가 공백(SPACE BAR)이면 list(map(int, input().split())을 사용하는 것이 바람직하다.
#구분자가 줄 바꿈일 때
n = int(input())
#구분자가 공백일 때
data = list(map(int, input().split()))
print(n)
print(data)
n, m, k = map(int, input().split())
print(n, m, k)
import sys
data = sys.stdin.readline().rstrip()
print(data)
출력
a = 1
b = 3
print(a, b) # 1 3 출력(공백 있음)
a = 1
b = 3
print(a)
print(b)
# 1
# 3 출력
문자열과 수를 함께 출력해야 하는 경우가 있다.
str()을 이용해서 수를 문자열로 바꿔주고 문자열끼리 더하는 ‘+’연산자를 사용한다.
answer = 7
print("정답은 " + answer + "입니다.") # str()을 사용하지 않으면 오류가 발생한다.
answer = 7
print("정답은 " + str(answer) + "입니다.") # 정답은 7입니다.
각 변수를 (,)로 구분하여 출력한다. (이 경우 의도치 않은 공백이 삽입될 수 있음에 주의하자)
answer = 7
print("정답은 ", answer, "입니다.")# 정답은 7 입니다.
f-string 문법 : 문자열 앞에 ‘f’를 붙임으로써 사용할 수 있는데, 단순히 수를 중괄호({})안에 넣음으로써, 자료형의 변환 없이도 간단하게 문자열과 정수를 함께 넣을 수 있다.
answer = 7
print(f"정답은 {answer}입니다.") # 정답은 7입니다.
주요 라이브러리의 문법과 유의점
파이썬 표준 라이브러리 공식 문서 : https://docs.python.org/ko/3/library/index.html
내장함수 : 별도의 import 명령어 없이 바로 사용할 수 있다.
sum() : 리스트와 같은 iterable 객체가 주어졌을 때, 모든 원소의 합을 반환한다.
result = sum([1, 2, 3, 4, 5])
print(result) # 15
min() / max(): 파라미터가 2개 이상 들어왔을 때 가장 큰 작은 값 / 큰 값을 반환한다.
result = min(1, 2 ,3, 4, 5)
print(result) # 1
result = max(1, 2, 3, 4, 5)
print(result) # 5
eval() : 수학 수식이 문자열 형식으로 들어오면 해당 수식을 계산한 결과를 반환한다.
result = eval("(3 + 5) * 7")
print(result)
sorted() : iterable 객체가 들어왔을 때, 정렬된 결과를 반환한다.(key속성으로 정렬 기준을 명시할 수 있다. / reverse 속성으로 정렬된 결과를 뒤집을지의 여부를 설정할 수 있다.)
result = sorted([9, 1, 8, 5, 4])
print(result) # [1, 4, 5, 8, 9]
result = sorted([9, 1, 8, 5, 4], reverse = True)
print(result) # [9, 8, 5, 4, 1]
sorted함수의 key 속성 이용 예시 (튜플 활용)
result = sorted([('홍길동', 35), ('이순신', 75), ('아무개', 50)], key=lambda x : x[1])
print(result) # [('홍길동', 35), ('아무개', 50), ('이순신', 75)]
리스트와 같은 iterable 객체는 sort()함수를 내장하고 있어서 굳이 sorted() 함수를 사용하지 않아도 된다.
data = [9, 1, 8, 5, 4]
data.sort()
print(data)
itertools : 모두 클래스이므로 객체 초기화 후 리스트 자료형으로 변환해야한다.
from itertools import permutations, combinations, product, combinations_with_replacement
data = ['A', 'B', 'C']
result = list(permutations(data, 3)) # 3개 뽑음, 순열
print(result)
result = list(combinations(data, 2)) # 2개 뽑음, 조합
print(result)
result = list(product(data, repeat=2)) # 2개 뽑음, 중복 순열
print(result)
result = list(combinations_with_replacement(data, 2)) # 2개 뽑음, 중복 조합
print(result)
heapq : 다양한 알고리즘에서 우선순의 큐의 기능을 구현할 때 사용
import heapq
def heapsort(iterable):
h = []
result = []
for value in iterable:
heapq.heappush(h, value)
for _ in range(len(h)):
result.append(heapq.heappop(h))
return result
result = heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
print(result) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
import heapq
def heapsort(iterable):
h = []
result = []
for value in iterable:
heapq.heappush(h, -value)
for _ in range(len(h)):
result.append(-heapq.heappop(h))
return result
print(heapsort([1, 3, 2, 6, 4, 8, 9])) # [9, 8, 6, 4, 3, 2, 1]
bisect : 이진 탐색을 쉽게 구현할 수 있도록 도와주는 라이브러리
정렬된 배열에서 특정한 원소를 찾아야 할 때 매우 효과적으로 사용된다.
bisect_left(a, x) : 정렬된 리스트 a에 데이터 x를 삽입할 가장 왼쪽 인덱스를 찾는 메서드 / O(logN)
bisect_right(a, x) : 정렬된 리스트 a에 데이터 x를 삽입할 가장 오른쪽 인덱스를 찾는 메서드 / O(logN)
from bisect import bisect_left, bisect_right
a = [1, 2, 4, 4, 8]
x = 4
y = 3
print(bisect_left(a, x)) # 2
print(bisect_right(a, x)) # 4
print(bisect_left(a, y)) # 2
print(bisect_right(a, y)) # 2
bisect_left와 bisect_right 함수로 값이 특정 범위에 속하는 원소의 개수를 구할 수 있다.
from bisect import bisect_left, bisect_right
def count_by_range(a, left_value, right_value):
right_index = bisect_right(a, right_value)
left_index = bisect_left(a, left_value)
return right_index - left_index
a = [1, 2, 3, 3, 3, 3, 4, 4, 8, 9]
print(count_by_range(a, 4, 4)) # 리스트 a에서 값이 4인 데이터의 개수 출력 (2)
print(count_by_range(a, -1, 3)) # 리스트 a에서 [-1, 3]범위의 데이터의 개수 출력 (6)
collections : 유용한 자료구조를 제공하는 표준 라이브러리다. (deque / counter)
deque : 스택이나 큐의 기능을 모두 포함 / 연속적으로 나열된 데이터의 시작부분이나 끝부분에 데이터를 삽입하거나 삭제할 때 효과적
popleft() : 첫 번째 원소 제거, pop() : 마지막 원소 제거,
appendleft(x) : 첫 번째 인덱스에 원소x 삽입, append(x) : 마지막 인덱스에 원소x 삽입
스택 : First In Last Out : append(), pop() 활용
큐 : First In First Out : append(), popleft() 활용
from collections import deque
data = deque([2, 3, 4])
data.append(5)
data.appendleft(9)
print(data) # deque([9, 2, 3, 4, 5])
print(list(data)) # [9, 2, 3, 4, 5]
a = data.popleft()
data.pop()
print(list(data)) # [2, 3, 4]
print(a) # 9
Counter : 리스트와 같은 iterable 객체가 주어졌을 때, 해당 객체 내부의 원소가 몇 번씩 등장했는지 알려준다.
from collections import Counter
counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
print(counter['blue']) # 3
print(counter['red']) # 2
print(dict(counter)) # {'red' : 2, 'blue' : 3, 'green' : 1}
math : 수학과 관련된 라이브러리
import math
print(math.factorial(5)) # 120 출력
print(math.sqrt(7)) # 7의 제곱근(2.6457513110645907) 출력
print(math.gcd(21, 14)) # 21과 14의 최대공약수(7) 출력
print(math.pi) # 파이(pi) 출력 (3.141592653589793)
print(math.e) # 자연상수 e 출력 (2.718281828459045)