언어/Python

map, filter, lambda 식 연습

JM Lee 2023. 3. 23. 22:12
728x90

lambda 식을 제대로 이해하지 못해서 프로그래머스를 통해 문제를 풀어보고,

다른 분들의 해답도 보면서 식을 제대로 이해해 보기로 했다.


우선 매우 쉬운 것부터 차근차근 풀어보았다.

보다시피 매우 간단하다. 그냥 빼기만 쓰면 된다.

def solution(num1, num2):
    return num1 - num2

그럼 이것을 lambda 식으로 바꾸면 어떻게 될까?

solution = lambda num1, num2 : num1 - num2

물론 이 경우는 위 식이 가장 편하지만.. lambda 식 설명을 하자면,

num1 과 num2를 lambda 식에 적용하겠다는 뜻인 [lambda num1, num2]

뒤에는 num1 - num2를 통한 식 계산

이게 기본 형태이다.


그럼 여기서 리스트가 들어가는 경우에는 어떻게 될까?

people = [{"name": "bob", "tall": 182},
          {"name": "carry", "tall": 185},
          {"name": "pray", "tall": 172},
          {"name": "crep", "tall": 169}
          ]


result = filter(lambda x: x['tall'] > 180, people)


print(list(result))

people이라는 리스트에서 180이 넘는 사람의 리스트만 꺼내오려고 한다.

사람을 지칭해야 하기 때문에 x라는 변수값을 정하고, x의 키가 180이 넘어야 한다는 filter를 'people list'에 적용시킨다.


마지막으로 map도 한 번 이용해보려고 한다.

def times_two(x):
    return int(x)*2


my_list = list(map(lambda x: int(x)*2, input().split(' ')))

print(my_list)

위의 식에서 보여주는 것은 x를 times_two def에 넣으면, 2x의 식을 거쳐간다는 뜻이다.

 

그렇다면 아래의 식은!?

lambda 식에 x를 넣은 다음, 모든 리스트의 숫자 x(int)를 2배로 만든다.

(#  input()에 int 처리를 하지 않으면 기본값은 string 처리가 되니깐, 숫자 처리할 땐 반드시 int 처리!)

 

그 다음 띄어쓰기한 부분들을 기준으로 split 처리를 하는데,

split하지 않으면 숫자들이 list 형태로 나타나는 것이 아니라 한 덩어리로 나타난다.

오히려 이렇게 붙여줘야 분리된 채 나타나고, 띄어쓰기 하면 오류가 나타난다.

반대로 split을 한다면?

이렇게 잘 나타남을 알 수 있다!

 

그리고 map은 리스트에 있는 모든 x(변수)를 넣게 하는 장치로,

map이 없으면 우리는 하나의 변수씩 넣을 수밖에 없다. 그럼 상당히 귀찮아지겠지?

 

나중에 실무에 들어가면 도움이 많이 된다고 하니 참고해보았다.