예지의 테크 로그포스 (Yeji's Tech Log Force)
파이썬 문법(함수&람다, 표준 라이브러리) 본문
▶ 파이썬에서의 논리 연산자
다른 언어 | 파이썬 |
X && Y | X and Y |
X || Y | X or Y |
!X | not X |
▶ 리스트, 튜플 문자열, 딕셔너리에 사용 가능한 연산
in / not in
x in 리스트 | 리스트에 x가 있으면 True |
x not in 문자열 | 문자열에 x가 없으면 True |
▶ pass 키워드
디버깅에서 일단 조건문 틀만 만들어놓고, 처리부분을 나중에 작성하고 싶을때
score = 85
if score >= 80:
pass # 나중에 소스코드를 작성하면 됨
else:
print('성적이 80점 미만입니다.')
print('프로그램 종료')
▶ 조건부 표현식
if~else문을 한 줄에 작성 가능
score = 85
result = "Success" if score >= 80 else "fail"
print(result)
=>Success
▶ 함수 정의
def 함수명(매개변수):
실행할 소스코드
return 반환 값
def add(a, b)
return a+b
print(add(3,7))
=>10
▶ global 키워드
함수 바깥에 선언된 변수를 참조할 때
a = 0
def func():
global a
a+=1
for i in range(10):
func()
print(a)
=>10
값을 출력 하는 것은 global 없이도 가능
a = 10
def func():
print(a+20)
func()
=>30
전역변수인 리스트의 함수를 이용해 호출하는 것도 global 없이 가능
arr = [1,2,3,4,5]
def func():
arr.append(6)
print(arr)
func()
=>[1,2,3,4,5,6]
반환 값을 여러개 가질 수도 있다.
def operator(a,b):
add_var = a+b
sub_var = a-b
mul_var = a*b
div_var = a/b
return add_var, sub_var, mul_var, div_var
a, b, c, d = operator(7,3)
print(a,b,c,d)
▶ 람다 표현식
함수 자체를 입력으로 받는 또 다른 함수가 존재할 때 유용.(함수를 한 줄에 간단히 작성할 수 있으니)
간단한 함수 or 함수를 한번 사용하고 버릴 경우 유용
arr = [('홍길동', 50), ('이순신', 32), ('아무개', 74)]
#arr 의 두번째 원소 return(즉, 나이)
def my_key(x):
return x[1]
print(sorted(arr, key = my_key)) #일반적인 함수를 이용한 나이순 정렬.
print(sorted(arr, key = lambda x: x[1]) #람다 활용. 어떤 원소x가 있을 때 그것의 index 1번째 원소를 이용
예) 람다 표현식으로 구현한 add() 메서드
print((lambda a, b: a+b)(3,7))
=>10
여러 개의 리스트에 적용할 때 유용(동일한 규칙을 가지는 함수를 모두 적용할 때)
# list1, list2 각 순서의 원소끼리 더한 리스트를 만드는 코드
list1 = [1,2,3,4,5]
list2 = [6,7,8,9,10]
result = map(lambda a, b: a + b, list1, list2) # lambda로 작성한 함수를 list2과 list2에 적용하는 것.
print(list(result))
=>[7, 9, 11, 13, 15]
▶ 코딩테스트에서 유용한 표준 라이브러리
내장 함수 | 기본 입출력, 정렬함수 등 프로그램 작성 필수 기능들 |
itertools | 반복되는 형태의 데이터 처리에 유용(순열, 조합 등) |
heapq | 힙 라이브러리 제공(우선순위 큐 - 다익스트라 등) |
bisect | 이진 탐색 제공 |
collections | 덱, 카운터 등 제공 |
math | 팩토리얼, 제곱근, 최대공약수(GCD), 삼각함수 관련 pi 등 |
- 내장 함수
1. sum()
result = sum([1,2,3,4,5])
print(result)
=>15
2. min(), max()
min_result = min(7,3,5,2)
max_result = max(7,3,5,2)
print(min_result, max_result)
==>2 7
3. eval() 수식 계산
result = eval("(3+5)*7")
print(result)
=>56
4. sorted()
result = sorted([9,1,8,5,4])
reverse_result = sorted([9,1,8,5,4], reverse=True)
print(result)
print(reverse_result)
=>
[1, 4, 5, 8, 9]
[9, 8, 5, 4, 1]
5. sorted() - 키 속성으로 정렬
arr = [('홍길동', 35), ('이순신', 75), ('아무개', 50)]
result = sorted(arr, key=lambda x: x[1])
print(result)
=>[('홍길동', 35), ('아무개', 50), ('이순신', 75)]
- Itertools
모든 경우의 수를 고려해야 할 때 itertools 라이브러리를 사용하면 효과적.
순열(nPr) | 서로 다른 n개에서 서로 다른 r 개 선택해 나열 | {'A', 'B', 'C'}에서 3개를 선택해 나열한다 => ABC, ACB, BAC, BCA, CAB, CBA |
조합(nCr) | 서로 다른 n개에서 순서 상관X 서로 다른 r개 선택 | {'A', 'B', 'C'}에서 순서 상관없이 두 개 선택 => AB, AB, BC |
1. permutations() 순열 구하기
from itertools import permutations
data = ['A', 'B', 'C']
result = list(permutations(data, 3))
print(result)
=>[('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]
2. combinations() 조합 구하기
from itertools import combinations
data = ['A','B','C']
result = list(combinations(data, 2))
print(result)
=>[('A', 'B'), ('A', 'C'), ('B', 'C')]
- Collections
counter() 각 원소의 등장 횟수 세는 기능
from collections import Counter
counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
print(counter['blue']) # blue 등장 횟수
print(counter['green']) # green 등장 횟수
print(dict(counter)) # 사전 자료형으로 반환
=>
3
1
{'red': 2, 'blue': 3, 'green': 1}
- Math
gcd() 최대공약수 구하기
# 최대 공약수(GCD)와 최소 공배수(LCM)을 구하는 소스코드
import math
# 최소 공배수(LCM)구하는 함수
def lcm(a, b):
return a*b // math.gcd(a,b) # //은 몫 연산자
a = 21
b = 14
print(math.gcd(21, 14)) # 최대 공약수
print(lcm(21,14)) # 최소 공배수
=>
7
42
Comments