100세까지 코딩
코딩 테스트를 위한 파이썬 기초 문법 정리 본문
- round() : 실수 값을 제대로 비교하지 못할 수도 있으니 반올림 한다.
ex) round( 123.456 , 2 ) = 123.46 // 소숫점 둘째 자리까지 (셋째에서 반올림) - 나누기 연산자(/)는 결과를 실수형으로 반환한다.
- 몫 연산자는 (//), 거듭 제곱 연산자는 (**)
- list 자료형 : 자바의 배열의 기능 & 연결 리스트
a = [1, 2, 3, 4, 5, 6]
# 여섯 번째 원소만 출력
print(a[5]) # ans : 6
# 뒤에서 세 번째 원소 출력
print(a[-3]) # ans : 4
# 두 번쨰 원소부터 네 번째 원소까지
print(a[1:4]) # ans : [2,3,4]
# 0부터 9까지의 수를 포함하는 리스트
b = [i for i in range(10)] # ans : [0,1,2,3,4,5,6,7,8,9]
# 0부터 10까지의 수 중에서 홀수만 포함하는 리스트
c = [i for i in range(10) if i % 2 == 1] # ans : [1,3,5,7,9]
# N X M 크기의 2차원 리스트 초기화
N,M = 3,4
Array = [[0] * M for _ in range(N)] # [0,0,0,0],[0,0,0,0],[0,0,0,0]
- list 관련 기타 메서드
함수명 | 설명 |
append() | 리스트에 원소를 하나 삽일할 때 사용 |
sort() | 기본 정렬 기능으로 오름차순 정렬 |
sort(reverse = True) | 내림차순 정렬 |
reverse() | 리스트의 원소의 순서를 모두 뒤집어 놓는다 |
insert(삽입할 위치 인덱스, 삽입할 값) | 특정한 인덱스 위치에 원소를 삽입할 때 |
count(특정 값) | 리스트에서 특정한 값을 가지는 데이터 개수를 셀 때 |
remove(특정 값) | 특정한 값을 갖는 원소를 제거할 때 (여러 개면 하나만 제거) |
a = [1, 4, 3]
# 리스트에 원소 삽입
a.append(2) # [1,4,3,2]
# 리스트 오름차순 정렬
a.sort() # [1,2,3,4]
# 리스트 내림차순 정렬
a.sort(reverse=True) # [4,3,2,1]
b = [4, 3, 2, 1]
# 원소 뒤집기
b.reverse() # [1,2,3,4]
# 인덱스 2에 3 추가
b.insert(2, 3) # [1,2,3,3,4]
# 특정 값인 데이터 개수 세기
print(b.count(3))
# 특정 값 데이터 삭제
b.remove(1)
a = [1, 2, 3, 4, 5, 5, 5]
remove_set = {3, 5}
result = [i for i in a if i not in remove_set] # [1,2,4]
- 문자열 연산
a = "String"
print(a * 3) # StringStringString
a = "ABCDEF"
print(a[2:4]) # CD
a[2] = 'a' # Error 문자열은 특정 인덱스의 값 변경 불가(Immutable)
- 튜플 자료형 : 한 번 선언된 값 변경 불가, 리스트에 비해 공간 효율적, () 소괄호를 사용하여 선언
a = (1,2,3,4,5,6,7)
print(a[3]) # 4
print(a[1:4]) # (2, 3, 4)
a[2] = 7 # Error 특정 인덱스의 값 변경 불가
- 튜플을 사용할 때
1. 서로 다른 성질의 데이터를 묶어서 관리할 때 ex) 최단 경로 알고리즘에서 (비용, 노드 번호)
2. 데이터의 나열을 해싱의 키 값으로 사용할 때
3. 리스트보다 메모리 효율적으로 사용할 때
- 사전 자료형 : 키와 값의 쌍을 데이터로 가지는 자료형, 자바의 HashMap
data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
b = { # 또 다른 선언 방법
'홍길동': 97,
'이순신': 98
}
if '사과' in data:
print("'사과'를 키로 가지고 있습니다.")
key_list = list(data.keys()) # 키 데이터만 담은 리스트
value_list = list(data.values()) # 값 데이터만 담은 리스트
# 각 키에 따른 값을 하나씩 출력
for key in key_list:
print(data[key])
- 집합 자료형 : 중복 X, 순서 X, {} 중괄호를 사용하여 선언 또는 set(리스트)를 이용
# 집합 자료형 초기화 방법 1
data = set([1, 1, 2, 3, 4, 4, 5]) # {1,2,3,4,5}
# 집합 자료형 초기화 방법 2
data = {1, 1, 2, 3, 4, 4, 5} # {1,2,3,4,5}
# 새로운 원소 추가
data.add(8) # {1,2,3,4,5,8}
# 새로원 원소 여러 개 추가
data.update([9, 10]) # {1,2,3,4,5,8,9,10}
# 특정한 값을 삭제
data.remove(3) # {1,2,4,5,6,9,10}
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}
- 기본 입력
n = int(input()) # 정수 1개 입력받기
a, b, c = map(int, input().split()) # 정수 여러개 공백기준으로 입력받기
data = list(map(int, input().split())) # 공백기준으로 정수받아 리스트에 넣기
import sys
data = sys.stdin.readline().rstrip() # 입력을 최대한 빨리 받기
- 기본 출력
a = 1
b = 2
# 콤마를 이용하여 띄어쓰기 구분 출력
print(a, b) # 1 2
# print()의 default는 출력 이후에 줄 바꿈
print(b, end=" ")
print("정답은" + str(a) + "입니다.") # 2 정답은1입니다.
answer = 7
print(f"정답은 {answer}입니다.") # 간단한 문자열과 정수를 함께 넣을 수 있다.
- 조건문
score = 85
if score >= 70:
print('성적이 70점 이상')
if score >= 90:
print('우수한 성적')
elif score >= 60:
pass
else:
print('조금 더 분발하세요')
print('프로그램 종료')
- 논리 연산자 : java와 달리 기호(&& || !)를 쓰지않고 직접 단어 사용
논리 연산자 | 설명 |
X and Y | X와 Y가 모두 참일 때 참. |
X or Y | X와 Y중 하나만 참이어도 참. |
not X | X가 거짓일 때 참. |
a = 15
if 0 <= a and a <= 20: # 0 <= a <= 20 도 파이썬에서는 가능
print("0이상이면서 20이하이다")
- 기타 연산자 : 리스트, 튜플, 문자열, 딕셔너리 모두에서 사용 가능
연산자 | 설명 |
x in 리스트 | 리스트 안에 x가 들어가 있을 때 참. |
x not in 문자열 | 문자열 안에 x가 들어가 있지 않을 때 참. |
pass | if 안에서 아무것도 처리하고 싶지 않을 때 |
- 반복문
i = 1
result = 0
while i <= 9:
result += i
i += 1
print(result) # 45
array = [9, 8, 7, 6, 5]
for x in array: # 데이터에 포함되어 있는 원소를 처음부터 하나씩 방문
print(x, end=" ") # 9 8 7 6 5
sum = 0
for i in range(1, 10): # 연속적인 값 차례대로 순회 range(시작 값, 끝 값 + 1)
if i % 2 == 0: # 짝수면
continue # 남은 코드 건너뛰고 다음 반복 진행
if i == 9:
break # 반복문 즉시 탈출
sum += i
print(sum) # 16
- 함수
def 함수명(매개변수):
실행할 소스코드
return 반환값
def add(a, b):
return a + b
print(add(3, 4)) # 7
print(add(b=3, a=4)) # 변수를 직접 지정할 수 있고 순서 달라져도 됨 7
- global 키워드
a = 10
def func():
global a # 함수 밖의 변수를 사용하고 싶을 때
a += 1
func()
print(a) # 11
- 여러개 반환
def operator(a, b):
add = a + b
substract = a - b
multi = a * b
divide = a / b
return add, substract, multi, divide # 여러 개 반환 가능
a, b, c, d = operator(7, 3)
print(a,b,c,d) # 10 4 21 2.333
- 람다 표현식 : 함수를 간단하게 작성할 수 있다.
array = [('홍길동', 50), ('이순신', 32), (('아무개'), 74)]
def my_key(x):
return x[1]
print(sorted(array, key=my_key))
# [('이순신', 32), ('홍길동', 50), (('아무개'), 74)]
print(sorted(array, key=lambda x: x[1]))
# [('이순신', 32), ('홍길동', 50), (('아무개'), 74)]
list1 = [1, 2, 3, 4, 5]
list2 = [6, 7, 8, 9, 10]
result = map(lambda a, b: a + b, list1, list2)
print(list(result)) # [7,9,11,13,15]
- 유용한 표준 라이브러리
1. 내장 함수 : 기본 입출력 함수부터 정렬 함수까지 기본적인 함수
2. itertools : 반복되는 형태의 데이터 처리 (순열, 조합)
3. heapq : 힙 자료구조를 제공 (우선순위 큐)
4. bisect : 이진 탐색 기능 제공
5. collections : 덱(deque), 카운터(Counter)등의 유용한 자료구조 포함
6. math : 수학적 기능 (팩토리얼, 제곱근, 최대공약수, 삼각함수, 파이)
- 내장 함수
result = sum([1, 2, 3, 4, 5]) # 합
print(result) # 15
min_result = min(7, 3, 5, 2) # 최솟값 찾아줌
max_result = max(7, 3, 5, 2) # 최댓값 찾아줌
print(max_result, min_result) # 7 2
result = eval("(3+5)*7") # 식을 계산해서 숫자로 반환
print(result) # 56
result = sorted([9, 1, 8, 5, 4])
reverse_result = sorted([9, 1, 8, 5, 4], reverse=True)
print(result) # [1,4,5,8,9]
print(reverse_result) # [9,8,5,4,1]
array = [[('홍길동', 50), ('이순신', 32), ('아무개', 74)]]
result = sorted(array, key=lambda x: x[1], reverse=True)
print(result) # [[ ('아무개', 74),('홍길동', 50), ('이순신', 32)]]
- 순열과 조합
from itertools import permutations
data = ['A', 'B', 'C']
result = list(permutations(data, 3)) # 3개를 뽑는 순열
print(result)
# [('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]
from itertools import combinations
data = ['A', 'B', 'C']
result = list(combinations(data, 2)) # 2개를 뽑는 모든 조합
print(result)
# [('A', 'B'), ('A', 'C'), ('B', 'C')]
- Counter : 등장 횟수를 세는 기능
from collections import Counter
counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
print(counter['blue']) # 'blue'가 등장한 횟수 출력
print(dict(counter)) # {'red': 2, 'blue': 3, 'green': 1}
- 최대 공약수와 최소 공배수
import math
def lcm(a, b):
return a * b // math.gcd(a, b)
print(math.gcd(21, 14)) # 7 최대 공약수 계산
print(lcm(21, 14)) # 42
'코딩테스트 > 파이썬' 카테고리의 다른 글
[백준] 10171번 고양이 (파이썬) (0) | 2024.01.05 |
---|---|
[백준] 2588번 곱셈 (파이썬) (0) | 2024.01.05 |
[이코테] 곱하기 혹은 더하기 (파이썬) (0) | 2023.12.27 |
[이코테] 1이 될 때까지 (파이썬) (0) | 2023.12.11 |
코딩 테스트 유리한 언어(자바에서 파이썬으로) (1) | 2023.12.03 |