[Python기초]function 연습3

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!


파이썬 function 연습문제3(feat.lambda)


Lambda가 무엇??

우리는 기존의 함수를 def를 통해 정의하여 만들었는데 람다는 함수를 한줄로 간단하게 작성할 수 있게 만드는 도구다. 형태는 다음과 같다.

(lambda 매개변수들 : 식 )(인수들)


예시

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

이 함수는 매개변수에 들어갈 두 인수를 더하여 반환해주는 함수다.
기존에는 이런식으로 def로 함수명, 변수, 실행문장 등을 적어주었다.

add2 = lambda x,y :  x+y

반면에 람다는 이런식으로 여러줄의 코드가 아닌 단 한줄로 함수의 기능을 만들 수 있다.

add3 = lambda x=10,y=10 :  x+y
print(add3(10,20)) # 30
print(add3()) # 20 -> 디폴트 (x=10) + (y=10)

이렇게 매개변수에 default 값을 지정해 놓을 수도 있다.

(lambda x:x+10)(25) # 35

람다 표현식을 변수에 할당하지 않고 그 자체를 호출해서 사용할 수도 있다.

(lambda x : y=10; x+y)(5)

하지만, 이렇게 람다의 표현식 안에서는 변수를 생성할 수가 없다.

y = 10
(lambda x : x+y)(5) # 15

위의 결과를 얻고 싶다면, 전역변수 y에 10을 넣어주고 람다를 사용하면 된다.


문제1. 리스트의 각 요소에 10을 더하는 함수


  • 문제 풀이를 위해 만들어 볼 함수:
    1. 반복문에서 직접 리스트의 요소들에 더해주는 함수
    2. 단순히 인수에 10을 더하는 함수 + map함수
    3. lambda + map

리스트의 각 요소에 10을 더하는 함수는 다양한 방법을 사용할 수 있는데 나는 여태까지 배워온 방법을 사용해 위와 같이 3개의 방식으로 풀어보겠다.


1. 반복문에서 직접 리스트의 요소들에 더해주는 함수

def add10(num):
    for i in range(len(num)):
        num[i] += 10

num = [1,3,4,10]
add10(num)
print(num)

# 함수명은 10을 더해준다는 의미의 add10, 매개변수는 num
# for 반복문을 이용 리스트 num의 길이만큼 반복문 수행
# num[i] 에 10을 더해 반환해주는 num[i] += 10
# add10함수 사용해 리스트 num의 요소들에 10씩 더한다.
[11, 13, 14, 20]

블로그에 포스팅한 파이썬 기초 연습 문제를 풀 때 가장 많이 사용한 방식을 함수로 정의해준 것이다. 이 방식은 기존 리스트의 값이 변경이 된다. 기존 리스트를 남겨두고 새로운 리스트를 만들어 더해주는 것도 조금 손봐주면 가능하다.


2. 단순히 인수에 10을 더하는 함수 + map함수

def add10(num):
    return num + 10
num = [1,3,4,10]
num2 = list(map(add10, num))
print(num2)
# 함수명 add10, 매개변수 num
# return으로 인수에 10을 더해서 반환
# 1번의 풀이와 달리 리스트가 아닌 단순한 인수에 10을 더해서 반환해주는 함수다.
# map(함수, 리스트) : 함수자리에 요소에 10을 더하는 함수 add10을 넣고, 1,3,4,10을 요소로 갖고 있는 리스트 num을 넣어준다.
# 그러면 각 요소에 10씩 더해질 것인데, map함수만 사용하면 데이터의 형태가 map 이다.
# list로 묶어서 이를 리스트화 시켜준 후 num2에 저장해준다. 
[11, 13, 14, 20]

Map 함수를 이용하면 이렇게 간단하게 기존 리스트의 값을 변화시키지 않고 새로운 리스트에 저장할 수 있다.


3. lambda + map

num3 = list(map(lambda num: num + 10 , num))
print(num3)

# 매개변수: num, 식: num + 10, 인수 num
# 해당 람다식은 문제풀이 2번의 def로 정의한 add10함수와 똑같은 기능을 한다.
# 동일하게 map 타입의 데이터를 list로 묶어 리스트로 변환
# num3에 저장
[11, 13, 14, 20]

문제풀이 2번과 해결하는 방식은 똑같다.
하지만 이 문제풀이로 알 수 있는 것은 람다를 사용해서 자칫 지저분할 수 있는 코드를 한줄로 줄여 확실히 보기 좋게 만들어 준다는 것이다.







문제2. 두 리스트의 각 자리수의 값을 합해서 새로운 리스트를 생성하는 함수를 만드시오.


  • 조건:
    list1 = [1,2,3,4] list2 = [10,20,30,40]

  • 출력 예시:

    [11, 22, 33, 44]
    


반복문을 사용하는 방법과, 람다와 맵을 사용하는 방법
이렇게 두 방법으로 풀 수 있다.


1. 반복문을 사용한 함수

def addList(x,y)
    list = []
    for i in range(len(x)):
        list.append(x[i] + y[i])
    return list

new_list = addList(list1,list2)
print(new_list)

# 빈 리스트 list를 생성
# for 반복문을 활용해 첫 리스트 x의 길이 만큼 반복수행
# 실행할 문장 :  빈 리스트 list에 두 리스트의 동일한 위치에 있는 요소끼리 더해 list에 추가
# 리스트 list를 반환

# addList에 list1, list2를 입력
# new_list에 저장
# new_list 출력
[11, 22, 33, 44]


2. lambda + map

new_list2 = list(map(lambda x,y : x + y, list1,list2))
print(new_list2)

# 매개변수 : x,y, 식 : x + y, 인수 : list1, list2
# list로 묶어 리스트화
# new_list2에 저장
# new_list2 출력
[11, 22, 33, 44]





요약

람다와 맵을 사용해 함수를 만들면 기존에 함수를 만드는 방식보다 훨씬 코드를 깔끔하게 작성할 수 있다.
코드의 최소화? 최적화?가 이 세계에서 중요한 목적 중 하나라고 알고있다. 보기 좋은 떡이 먹기도 좋다는 말이 있지 않은가? 같은 기능을 하는 코드라고해도 짧고 간결한 쪽이 훨씬 더 눈길이 가는 것은 당연지사라고 생각한다.
오늘도 이렇게 중요한 경험을 해서 뿌듯하다.

2022

[web]jQuery 복습 3

2 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]jQuery 복습 2

11 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]jQuery 복습 1

16 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리4

6 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리3

6 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리2

6 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리1

7 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]CSS 기초 정리

9 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]HTML 기초 정리

2 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[Pandas]pandas 연습

3 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

맨 위로 이동 ↑

2021

[Python기초]module

1 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

맨 위로 이동 ↑