예지의 테크 로그포스 (Yeji's Tech Log Force)

파이썬 문법(함수&람다, 표준 라이브러리) 본문

카테고리 없음

파이썬 문법(함수&람다, 표준 라이브러리)

Yeji Heo 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, 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