다차원 리스트의 정렬이나 딕셔너리의 value 기준 정렬 등에 람다 함수를 사용하게 될 일이 많은데, 알음알음 남의 코드 보면서 알게 되어 아무생각 없이 람다 함수를 사용하다가, 한번 개념을 정리해 보는 것이 좋을듯 하여 남겨본다.

 

람다 함수란?

파이썬에서 람다 함수는 lambda 키워드를 사용하여 간단하게 익명 함수를 만드는 방법이다. 주로 한 줄로 표현할 수 있는 간단한 함수에 유용하게 사용된다. 내가 처음 람다 함수를 이해한 방식은 수학에서 집합을 나타낼 때, S = { x | ... } 로 시작하는 문법과 거의 동일하다고 이해하고 사용했다. 람다 함수는 일반 함수처럼 이름을 가지지 않고, 선언과 동시에 사용된다. 람다 함수의 기본 문법을 보면 다음과 같다.

# 람다 함수 기본 문법
lambda arg1, arg2: return_value

# 두 숫자를 더하는 람다 함수의 예시
add = lambda x, y: x + y
print(add(5, 3)) # 출력: 8

 

람다 함수로 리스트 정렬하기

람다 함수는 리스트를 특정 조건에 따라 정렬할 때 매우 유용하다. 예를 들어, 다중 리스트를 특정 인덱스 기준으로 정렬하려고 할 때 사용할 수 있다. 예를 들어 학생들의 이름과 점수 리스트가 있을 때, 이 리스트를 점수 기준으로 정렬하려면 람다 함수를 활용할 수 있다.

students = [("철수", 85), ("민수", 75), ("범수", 90)]

# 점수를 기준으로 오름차순 정렬
sorted_students = sorted(students, key=lambda x: x[1])
print(sorted_students)
# 출력: [("민수", 75), ("철수", 85), ("범수", 90)]

# 점수를 기준으로 내림차순 정렬
sorted_students_reverse = sorted(students, key=lambda x: x[1], reverse=True)
print(sorted_students_reverse)
# 출력: [("범수", 90), ("철수", 85), ("민수", 75)]

여기서 key=lambda x: x[1] 부분은 x[1] 값인 점수 기준으로 정렬하라는 의미이다.

 

딕셔너리를 value 기준으로 정렬하기

딕셔너리는 for 문에 넣어 반복문을 돌리면 key를 기준으로 돌게 된다. 그런데 key가 아니라 value를 기준으로 무언가 하고 싶을 때가 많은데, value를 기준으로 정렬할 때에도 람다 함수를 사용하면 편리하다.

scores = {"철수": 85, "민수": 75, "범수": 90}

# value 기준으로 정렬하기
sorted_scores = dict(sorted(scores.items(), key=lambda x: x[1]))
print(sorted_scores)
# 출력: {'민수': 75, '철수': 85, '범수': 90}

여기서 sorted(scores.items(), key=lambda x: x[1]) 부분은 딕셔너리의 (key, value) pair를 리스트로 변환한 후, value를 기준으로 정렬한 것이다. 마지막에 dict()로 감싸서 다시 딕셔너리 형태로 변환한 것이다.

 

리스트 필터링하기

람다 함수는 filter()와 함께 특정 조건을 만족하는 요소만 걸러낼 때도 유용하다. 예를 들어 숫자 리스트에서 짝수만 걸러내고 싶다면 다음과 같이 할 수 있다.

numbers = [1, 2, 3, 4, 5, 6]

# 짝수만 필터링하기
even_numbers = list(filter(lambda x: x%2 == 0, numbers))
print(even_numbers)
# 출력: [2, 4, 6]

 

마무리

람다 함수는 파이썬에서 간단한 함수를 작성할 때 매우 유용한 도구이다. 리스트나 딕셔너리의 특정 기준에 따라 정렬하거나, 특정 조건에 맞는 요소만 필터링할 때 간결하게 사용할 수 있다.

728x90

'🔨 개발 > 📚 개발지식모음집' 카테고리의 다른 글

YAML 파일이란?  (1) 2024.09.13
20240903 requirements.txt 문제  (0) 2024.09.03
20240808  (0) 2024.08.08
20240807  (0) 2024.08.07
20240806  (0) 2024.08.06

예전에 풀다 틀린 문제 하나 클리어

1016 - 제곱ㄴㄴ수

https://www.acmicpc.net/problem/1016

 

내 해답

더보기

에라토스테네스고 뭐시기고 필요없다. set() 자료형으로 쉽게 해결.

주어진 수 범위에서 제곱수로 나누어 떨어지는 수의 개수를 뺐다. 주어진 수 범위를 반복문으로 돌면 시간초과.

주어진 예제 입력 외에도 최소/최대 조합인 [1,000,000,000,000, 1,000,001,000,000] 범위로 테스트 해보기. [4, 4] 범위도 0 나오는지 잘 확인해보기

min_num, max_num = map(int, input().split(" "))
# 2 부터 (max의 제곱근 정수부분) 까지 반복문을 돌려서 검사하면?
max_sqrt = int(max_num**0.5)
# min_num보다 크거나 같고 max_num보다 작거나 같은 수 중에서
# 제곱수로 나누어 떨어지는 수를 리스트에 집어넣고 set으로 변환
num_list = []
for a in range(2, max_sqrt+1):
	if a != 1:
		square_a = a*a
		Q_min = min_num//square_a
		Q_max = max_num//square_a
		
		for b in range(max(Q_min,1), Q_max+1):
			if square_a*b >= min_num and square_a*b <= max_num:
				num_list.append(square_a*b)

num_set = set(num_list)
print(max_num-min_num+1-len(num_set))
728x90

'🔨 개발 > ✏️ Algorithm' 카테고리의 다른 글

2156 포도주 시식 파이썬  (2) 2024.10.20

간만에 녹슨 뇌를 깨울 겸 쉬운 문제부터 시작.

2156 - 포도주 시식

https://www.acmicpc.net/problem/2156

 

내 해답

더보기

기초적인 DP 문제이니 점화식을 잘 짜보자.

지금까지 마셔왔던 최대 양과 잔에 든 양을 바탕으로 n번째 잔에서 마실 수 있는 최대 양을 계산하는 것이 관건. 어떤 것을 고르고 어떤 것을 스킵할지에 주목. 반복문 초기에 0, 1, 2 케이스까지 실수없이 계획 세우기.

n = int(input())
wine_list = []

for a in range(n):
	wine_list.append(int(input()))

max_list = [0]*n

'''
n 번째 max_list 값은
1. max_list[n-1] -> n을 skip
2. n + max_list[n-2] -> n-1을 skip
3. n + n-1 + max_list[n-3] -> n-2를 skip
1,2,3 중 max값을 가져간다

itr==2 인 경우는?
1. max_list[itr-1] -> 2를 skip
2. wine_list[2]+wine_list[0] -> 1을 skip
3. wine_list[2]+wine_list[1] -> 0을 skip
'''

for itr in range(n):
	if itr == 0:
		max_list[itr] = wine_list[itr]
	elif itr == 1:
		max_list[itr] = max_list[itr-1] + wine_list[itr]
	elif itr == 2:
		max_list[itr] = max(max_list[itr-1], wine_list[itr]+wine_list[itr-2], wine_list[itr]+wine_list[itr-1])
	else:
		max_list[itr] = max(max_list[itr-1], wine_list[itr] + max_list[itr-2], wine_list[itr]+wine_list[itr-1]+max_list[itr-3])

print(max_list[n-1])

 

728x90

'🔨 개발 > ✏️ Algorithm' 카테고리의 다른 글

1016 제곱ㄴㄴ수 파이썬  (0) 2024.10.20

공유받은 프로젝트 내에서 pip install -r requirements.txt 를 이용해서 모듈을 설치했는데 main.py를 실행시키면 해당 모듈을 찾을 수 없다고 나오고, 결국 하나하나 pip install로 설치해야 하는 문제 발생

728x90

'🔨 개발 > 📚 개발지식모음집' 카테고리의 다른 글

파이썬 람다 함수 사용법 정리  (2) 2024.11.04
YAML 파일이란?  (1) 2024.09.13
20240808  (0) 2024.08.08
20240807  (0) 2024.08.07
20240806  (0) 2024.08.06

+ Recent posts