다음의 함수를 보자.
# n을 인자로 받아 세제곱 값을 반환
def cube(n):
return n**3
이때, lambda를 사용하면 함수를 더 간결하게 작성할 수 있다.
# return 불필요, 이때 cube는 이름을 붙였다고 생각하면 된다
cube = lambda n: n**3
보통 간단한 함수를 선언할 때, 예를 들어, 한번 쓰고 말 경우에 사용한다고 생각하면 된다.
이제 두 경우가 온전히 같은지 비교하기 위해 아래의 코드를 보자.
def cube_def(n):
return n**3
cube_lamb = lambda n: n**3
print(cube_def(3)) # 27
print(cube_lamb(3)) # 27
# test_list에 담긴 각 값에 대해서도 시도
test_list = [4, -1, 5, 9, -2]
for elem in test_list:
# 만약 둘이 다른 함수라면 error가 발생
assert(cube_def(elem) == cube_lamb(elem)) # Error 없음
assert('조건')
는 '조건'이 False인 경우 error를 발생시킨다.
List를 정렬해줄 수 있는 sort 함수에 대해 알아보자. 바로 아래 예제를 통해 sort의 활용법을 이해할 수 있다.
Sorting을 위해 사용할 수 있는 방법에는 크게 두 가지가 있다.
# Sorting을 위해 크게 '.sort()' 와 'sorted()' 사용 가능
num_list = [-2, 1, 4, 8, -7]
num_list.sort() # 기본은 오름차순 정렬
print(num_list) # [-7, -2, 1, 4, 8]
이때 .sort()
만 적용했음에도 원래 list가 정렬된 것이 중요하다.
num_list = [-2, 1, 4, 8, -7]
sorted(num_list)
print(num_list) # [-2, 1, 4, 8, -7]
num_list = sorted(num_list)
print(num_list) # [-7, -2, 1, 4, 8]
이때는 sorted()
가 어떤 변수에 선언되지 않으면, 원래의 list가 바뀌지 않는다는 것을 알 수 있다.
이어서 sorted()
의 option에 대해 알아보자. 만약 위의 예시에서 절댓값 크기를 기준으로 정렬하고 싶다면 아래와 같이 하면 된다.
num_list = [-2, 1, 4, 8, -7]
# 참고로, abs는 python 기본 내장 함수이다
num_list = sorted(num_list, key = abs) # key에 원하는 기준을 함수로 입력
print(num_list) # [1, -2, 4, -7, 8]
# 만약, 절대값이 큰 순서부터 정렬하고 싶다면 reverse를 사용하자
num_list = sorted(num_list, key = abs, reverse = True)
print(num_list) # [8, -7, 4, -2, 1]
조금 더 응용하면 lambda
를 선언한 뒤, dictionary를 정렬하는 것도 가능하다.
# 아래와 같은 dictionary를 선언하자 (참고로 알파벳 순서는 C-I-T-W 순)
movie_dict = {"Toy story":10, "Iron man":3, "Coco":17, "Wreck it ralph":9}
# Case 1. 기본 sorted() 적용, 영화 이름에 대해서만 알파벳 순서대로 정렬
movie_1 = sorted(movie_dict)
print(movie_1) # ['Coco', 'Iron man', 'Toy story', 'Wreck it ralph']
# Case 2. 영화 이름 (key) 기준, 사전 역순으로 정렬 -> tuple 형태로!
movie_2 = sorted(movie_dict.items(), key = lambda x: x[0], reverse = True) # x[0] 즉, 각 원소의 key를 읽으라는 뜻
print(movie_2) # [('Wreck it ralph', 9), ('Toy story', 10), ('Iron man', 3), ('Coco', 17)]
# Case 3. 숫자 (value) 기준, 오름차순으로 정렬 -> tuple 형태로!
movie_3 = sorted(movie_dict.items(), key = lambda x: x[1]) # Default가 'reverse = False'
print(movie_3) # [('Iron man', 3), ('Wreck it ralph', 9), ('Toy story', 10), ('Coco', 17)]
# Case 4. Case 3 에서 숫자가 큰 순서로 영화 이름만 나오게 하고 싶다면,
movie_4 = sorted(movie_dict, key = lambda x: movie_dict[x], reverse = True) # 'movie_dict'에 대해 sorted() 적용
print(movie_4) # ['Coco', 'Toy story', 'Wreck it ralph', 'Iron man']
# 원래의 dictionary는 변화 없음
print(movie_dict) # {'Toy story': 10, 'Iron man': 3, 'Coco': 17, 'Wreck it ralph': 9}