📒 Today I Learn/🐍 Python

[Python 문법 기초] map, filter, lambda 식

se0ehe 2024. 6. 28. 10:26

 

2024.06.28
오예 금요일이다!! 오늘은 파이썬 기초 강의를 모두 들어서 정리한다.
부족한 지식은 구글링하면서 코드카타로 연습해야지!

 
💡 map ()

여러 개의 데이터를 받아서 각각의 요소에 함수를 적용한 결과를 반환하는 내장 함수

map(function, iterable)
  • function : 각 요소에 적용할 함수
  • iterable : 함수를 적용할 데이터 집합

+연습+

# 21살 이상이면 성인, 미만이면 청소년이라는 리스트를 출력

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}
]

- 1차

def check_adult(person):
    if person['age'] > 20:
        return '성인'
    else:
        return '청소년'

result = map(check_adult, people)

print(list(result))

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

def로 함수를 정의하여, check_adult(person)이라는 함수가 있는데,
만약에 나이가 20살 초과면 '성인'이라고 반환하고 그 외에는 '청소년'이라고 반환해줘 라고 한 것

✔️ list()

비어있는 리스트를 생성할 수 있다.

print(list(result)) => 이 부분은 리스트로 만들어 달라는 함수를 쓴 것이다.
list()를 쓰지 않으면 리스트로 만들어지지 않는데, 이건 map함수 겉에 이용해도 같은 의미로 출력이 된다.
ex) result = list(map(check_adult, people))
      print(result)

- 2차

def check_adult(person):
    return ('성인' if person['age'] > 20 else '청소년')

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

좀 더 간단하게 쓰면 이렇게 쓸 수 있다.
- 3차

result = map(lambda x: ('성인' if x['age'] > 20 else '청소년'), people)
print(list(result))

이때 쓰인 람다식은 아래에 정리해 두었다.
x(어떤 것)의 ['age']라는게 20보다 크면 '성인'이라고 써주고 아니면 '청소년이라고 써줘

💡 lambda ()

익명 함수(anonymous function)라고도 한다.
이름이 없는 함수로, 일반적으로 함수를 한 번만 사용하거나 함수를 인자로 전달해야 하는 경우에 매우 유용하게 사용

lambda 인자: 표현식

def 키워드를 사용하여 함수를 정의하는 것보다 간결하고 간편한 방식으로 함수를 정의할 수 있다.
예시로,

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

이거를 람다 함수를 써서 바꾸면,

add = lambda x, y: x + y

로 쓸 수 있다.

💡filter ()

map과 유사한데 True 인 것들만 뽑는다.
직관적이어서 유용하게 쓰인다!

result = filter(lambda x: x['age'] > 20, people)

print(list(result))

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

20이상인 딕셔너리들만 True이기 때문에 필터링하여 출력해줬다.