람다의 형식
lambda 매개변수 : 표현식
일반적인 함수를 보자.
def add(x, y):
return x + y
result = add(3, 5)
print(result) #8
이것을 lambda를 사용해서 더 짧게 만들어보자.
add_lambda = lambda x, y: x + y
result_lambda = add_lambda(3, 5)
print(result_lambda) #8
print(
(lambda x,y : x+y)(3,4))
print(
(lambda x,y,z: x+y*z)(3,4,5))
lambdas = [lambda x:x+10, lambda x: x+100]
print(lambdas[0](5)) #15
ops = [lambda x,y:x*y, lambda x,y: x/y]
print(ops[0](3,2)) #6
print(ops[1](3,2)) #1.5
people = [{'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}, {'name': 'Charlie', 'age': 35}]
# 나이를 기준으로 정렬하기 위해
sorted_people = sorted(people, key=lambda people: people['age'])
print(sorted_people)
# [{'name': 'Bob', 'age': 25}, {'name': 'Alice', 'age': 30}, {'name': 'Charlie', 'age': 35}]
map의 형식
map(함수, 리스트)
def func_mul(x):
return x * 2
result = list(map(func_mul, [1,2,3,4]))
print(result) #[2, 4, 6, 8]
근데 웬만하면 for문으로 바꿀 수 있음.
a = [i *2 for i in range(1,11)]
a #[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
이 a의 값들을 모두 제곱해서 [4, 16, 36, 64, 100, 144, 196, 256, 324, 400]
을 만들어보자
for 반복문을 썼다면?
a_square = []
for num in a:
a_square.append(num**2)
print(a_square)
map과 lambda를 쓰면?
a_square = list(map(lambda x:x**2, a)) #무엇을 할지 x:x**2, 어디서 할지 a
a_square
["1","2","3","4"] -> [2, 3, 4, 5] 로 바꿔보자.
time_list = ["1","2","3","4"]
new_time_list = list(map(lambda x: int(x)+1, time_list))
print(new_time_list)
리스트 컴프리헨션을 이용해
time_list = ["1","2","3","4"]
new_time_list = [int(i) + 1 for i in time_list]
print(new_time_list)
으로 할 수도 있다.
x = [1,2,3], y = [2,3,4] 두 리스트의 같은 인덱스값을 더해 [3, 5, 7]을 만들어보자.
x = [1,2,3]
y = [2,3,4]
print(list(map(lambda x,y :x + y, x , y)))
만약 이것을 함수를 사용했다면?
def listfun(x:list, y:list) -> list:
for i in range(0,len(x)):
print(x[i] + y[i], end = " ")
listfun([1,2,3],[2,3,4])
map과 lambda를 쓰면?
x = [1,2,3]
y = [2,3,4]
print(list(map(lambda x,y :x + y, x , y)))
numlist = [1.2,2.3, 3.0,5.4]
float형을 int로 바꿔 [1, 2, 3, 5]을 출력해보자.
리스트 컨프리헨션을 쓰면
numlist = [1.2,2.3, 3.0,5.4]
intlist = [int(i) for i in numlist]
print(intlist)
map과 lambda를 쓰면?
numlist = [1.2,2.3, 3.0,5.4]
intlist = list(map(lambda x:int(x), numlist))
print(intlist)
bir = ["lee, 2000", "kim, 2000", "choi, 2001", "park, 2001"]
을
['lee', 'kim', 'choi', 'park']
[' 2000', ' 2000', ' 2001', ' 2001']
으로 분류해보자.
리스트 컴프리헨션을 쓰면?
bir = ["lee, 2000", "kim, 2000", "choi, 2001", "park, 2001"]
names = [x.split(',')[0] for x in bir]
birth = [x.split(',')[1] for x in bir]
print(names)
print(birth)
map과 lambda를 쓰면?
위 리스트에서 ,을 기준으로 나누면
llist = list(map(lambda x: x.split(','), bir))
#[['lee', ' 2000'], ['kim', ' 2000'], ['choi', ' 2001'], ['park', ' 2001']]
각 리스트에서 0,1번째 인덱스로 나누면 되겠다!
bir = ["lee, 2000", "kim, 2000", "choi, 2001", "park, 2001"]
names = list(map(lambda x: x.split(',')[0], bir))
birth = list(map(lambda x: x.split(',')[1], bir))
print(names)
print(birth)