이코테 with Python 리뷰+2

LEE EUI JOO·2023년 3월 9일
0

CodingTest

목록 보기
2/6

1. 함수와 람다 표현식

1. 함수

  • 함수란 특정한 작업을 하나의 단위로 묶어 놓은 것

  • 함수를 사용하면 불필요한 소스코드의 반복을 줄일 수 있음

  • 내장 함수

    • 파이썬이 기본적으로 제공하는 함수
  • 사용자 정의 함수

    • 개발자가 직접 정의하여 사용할 수 있는 함수

2. 함수 정의

  • 프로그램에는 똑같은 코드가 반복적으로 사용되어야 할 때가 많다
  • 함수를 사용하면 소스코드의 길이를 줄일 수 있다.
    • 매개변수 : 함수 내부에서 사용할 변수
    • 반환 값 : 함수에서 처리 된 결과를 반환
def 함수명(매개변수):
	실행할 소스코드
    return 반환 값

def add (a,b):
    return a + b
result  = add(1,2)
print(result)

3

3. 파라미터 지정하기

  • 파라미터의 변수를 직접 지정할 수 있다
    • 이 경우 매개변수의 순서가 달라도 상관이 없다
def add(a,b):
	print('결과:', a+b)
add(b=2, a=1)

결과 :  3

4. global 키워드

  • global 키워드로 변수를 지정하면 해당 함수에서는 지역 변수를 만들지 않고, 함수 바깥에 선언된 변수를 바로 참조하게 된다.
a = 0
def func():
    global a ## 참조하겠다
    a += 1
    
for i in range(10):
    func()
    
print(a)

10
*****
array = [1,2,3,4]

def func():
    global array
    array.append(5)
    print(array)
    
func()

[1, 2, 3, 4, 5]
  • 내부함수 우선 처리
array = [1,2,3,4]

def func():
    array = [5,6,7]
    array.append(8)
    print(array)
    
func()

[5, 6, 7, 8]

5. 여러 개의 반환 값

  • 파이썬에서 함수는 여러 개의 반환 값을 가질 수 있음
def oper(a, b):
    add_var = a + b
    sub_var = a - b
    return add_var,sub_var
a,b = oper(3,7)
print(a,b)

10 -4

6. 람다 표현식

  • 람다 푠현식을 이용하면 함수를 간단하게 작성할 수 있음

    • 특정한 기능을 수행하는 함수를 한 줄에 작성할 수 있다는 점이 특징
  • 매우 효과적으로 사용되는 경우는 어떠한 함수 자체를 입력으로 받는 또 다른 함수가 존재할 수 있는데 효과적으로 사용될 수 있음

def add (a,b):
    return a + b

## 일반적인 add() 메서드 사용
print(add(1,2))

## 람다 표현식으로 구현
print((lambda a,b : a +b )(1,2))

3
3
  • 또한, 함수의 기능이 매우 간단하거나, 단순히 한번 사용하고 말 경우 효과적으로 사용되는 예
  • 예1) sorted() 함수
array = [('lee', 11),('eui', 2),('joo', 35)]

def kkey(x):
    return x[1]

print(sorted(array, key = kkey))

## 람다함수로 구현했을 때
print(sorted(array, key = lambda x: x[1]))

[('eui', 2), ('lee', 11), ('joo', 35)]
[('eui', 2), ('lee', 11), ('joo', 35)]
  • 예2) 여러 개의 리스트에 적용
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]

2. 실전에서 유용한 표준 라이브러리

1. 내장 함수

  • 기본 입출력 함수부터 정렬 함수까지 기본적인 함수들을 제공
    • 파이썬 프로그램을 작성할 때 없어서는 안 되는 필수적인 기능을 포함하고 있음
#sum
result = sum([1,2,3,4,5])
print(result)

# mix max
min_result = min(1,2,3,4)
max_result = max(1,2,3,4)
print(min_result,max_result)

# eval()
result = eval("(3+5)*7")
print(result)

# sorted()
result = sorted([2,5,3,6,7])
reverse_result  = sorted([2,5,3,6,7], reverse=True)
print(result)
print(reverse_result)

# sorted with key
array = [('lee', 11),('eui', 2),('joo', 35)]
print(sorted(array, key = lambda x : x[1], reverse=True))

15
1 4
56
[2, 3, 5, 6, 7]
[7, 6, 5, 3, 2]
[('joo', 35), ('lee', 11), ('eui', 2)]

2. itertools

  • 파이썬에서 반복되는 형태의 데이터를 처리하기 위한 유용한 기능들을 제공
    • 특히, 순열과 조합 라이브러리(완전 탐색 유형)는 코딩 테스트에서 자주 사용된다.
  • 모든 경우의 수를 고려해야 할 때 어떤 라이브러리를 효과적으로 사용할 수 있을지의 문제

  • 순열 : 서로 다른 n개에서 서로 다른 r개를 선택하여 일렬로 나열하는 것

    • {'A', 'B', 'C'} 에서 세 개를 선택하여 나열하는 경우
      • 'ABC', 'ACB', 'BAC', 'BCA','CAB','CBA'
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')]
  • 중복 순열
from itertools import product
data = ['A', 'B', 'C']

## 2개를 뽑는 모든 순열 구하기
## 중복 허용
result = list(product(data, repeat=2))
print(result)

[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]

  • 조합 : 서로 다른 n개에서 순서에 상관 없이 서로 다른 r 개를 선택하는 것
    • {'A', 'B' ,'C'}에서 순서를 고려하지 않고 두 개를 뽑는 경우
      • 'AB', 'AC', 'BC'
from itertools import combinations

data = ['A', 'B', 'C']
result = list(combinations(data,2))
print(result)

[('A', 'B'), ('A', 'C'), ('B', 'C')]
  • 중복 조합
from itertools import combinations_with_replacement

data = ['A', 'B', 'C']
## 2개를 뽑는 모든 조합 구하기
## 중복 허용
result = list(combinations_with_replacement(data,2))
print(result)

[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]


3. heapq

  • 힙(Heapq) 자료구조를 제공
    • 일반적으로 우선순위 큐 기능을 구현하기 위해 사용
    • 다익스트라와 같은 최단 경로 문제

4. bisect

  • 이진 탐색(Binary Search) 기능을 제공

5. collections

  • 덱(deque), 카운터(Counter) 등의 유용한 자료구조를 포함한다.
  • Counter
    • 파이썬 collections 라이브러리의 Counter 는 등장 횟수를 세는 기능을 제공
    • 리스트와 같은 반복 가능한(iterable) 객체가 주어졌을 때 내부의 원소가 몇 번씩 등장했는지를 알려준다
from collections import Counter

counter = Counter(['A','A','B','C','C','C'])

print(counter['A'])
print(counter['B'])
print(counter['C'])
print(dict(counter))

2
1
3
{'A': 2, 'B': 1, 'C': 3}

6. math

  • 팩토리얼, 제곱근, 최대공약수(GCD), 삼각함수 관련 함수부터 파이(pi) 와 같은 상수를 포함한다.

  • 최대 공약수

    • 최대 공약수를 구해야 할 때는 math 라이브러리의 gcd()함수를 이용할 수 있다
import math

def lcm(a,b):
    return a * b // math.gcd(a,b)

a = 10
b = 40

print(math.gcd(10,40)) # 최대공약수 계산
print(lcm(10, 40)) # 최소 공배수 계산

10
40

참고 자료

서적 : 이것이 코딩 테스트다 with 파이썬
채널 : '동빈나' YouTube Channel

profile
무럭무럭 자라볼까

0개의 댓글