-
파이썬 문법(함수&람다, 표준 라이브러리)카테고리 없음 2023. 2. 2. 14:41
▶ 파이썬에서의 논리 연산자
다른 언어 파이썬 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, BC1. 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