[파이썬] lambda와 map 사용하기

InAnarchy·2023년 4월 11일
0

Python

목록 보기
2/14
post-thumbnail

lambda란?

  • 익명 함수를 생성하는데 사용되는 키워드
  • def와 달리 이름이 없고, 함수를 짧게 만들어 줌.

람다의 형식

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 객체를 리턴하므로 list형태로 바꿔서 프린트해야 함.

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문으로 바꿀 수 있음.

lambda와 map을 모두 사용한 예시

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)
profile
github blog 쓰다가 관리하기 귀찮아서 돌아왔다

0개의 댓글