개발기초

파이썬 기초문법 뽀개기 : map, lamda, filter !! 리스트 내의 원소 활용

Veams 2022. 11. 21.

@ map() 활용

map(함수, 리스트)

첫번째, map()식이 활용된 보통의 형태  - 리스트의 원소를 조작하기

people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby', 'age': 57},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]
def check_adult(person):
    if person['age'] > 20:
        return '성인'
    else:
        return '청소년'

result = map(check_adult, people)
print(list(result))

# map(함수, 리스트)은 리스트 요소를 하나하나 돌면서 함수를 적용하라.라는 뜻.
# 그 리턴 값을 모아서 마지막에 list로 만들어서 print 했다.

 

두 번째 형태. if-else 문을 1줄짜리로 줄였다. 

https://veams.tistory.com/33 참고

people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby', 'age': 57},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]
def check_adult(person):
    return '성인' if person['age'] > 20 else '청소년'
# 위 4줄 짜리 if-else 문을 조작하여 1줄짜리로 줄임

result = map(check_adult, people)
print(list(result))

 

@ lambda의 활용.

   lambda 매개변수 : 표현식  

 

파이썬의 lambda(람다)는 Lisp 언어의 lambda에서 가져와 발전했다고 한다.

(지나가는 썰로, Y-combinator의 창업자 폴 그레이엄은 그의 에세이에서 매번 Lisp는 가장 효율적이며 강력한 언어라고 예찬했었다.)

 

     형태로 활용한다.

 

예제를 보자.

def sum(x, y):
    return x+y

sum(3,5)

실행결과 ==> 8

 

lambda는 함수를 한 줄짜리 코드로 만들어준다. 실행결과는 동일하다.

(lambda x,y: x+y)(10,20)

실행결과 ==> 8

 

그래서 lambda 활용한 세 번째 형태이다.  

people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby', 'age': 57},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]

result = map(lambda x: ('성인' if person['age'] > 20 else '청소년'), people)
# lambda 매개변수 : 표현식
# (map) 리스트people을 돌면서 x에 넣을 것인데.
# (lambda) 그 person을 '성인' if person['age'] > 20 else '청소년'로 return한다.

print(list(result))

실행결과 ==> 

['청소년', '성인', '청소년', '청소년', '성인', '성인', '성인', '성인']

 

 

@ filter() 활용

filter(적용시킬 함수, 적용시킬 요소들)

- map과 유사하다. Ture인 것들만 뽑는다.

filter를 활용한 네 번째 형태

people = [...]

result = filter(lambda x: x['age'] > 20, people)
# lambda 매개변수 : 표현식
# people을 x의 요소 하나하나에 다 넣고, x['age']값이 20보다 크면 걔네들만 필터링하라.

print(list(result))

실행결과 ==>

[{'name': 'carry', 'age': 38}, {'name': 'ben', 'age': 27}, {'name': 'bobby', 'age': 57}, {'name': 'red', 'age': 32}, {'name': 'queen', 'age': 25}]

 

 

 

댓글