[Python] 람다 lambda, reduce() 함수 사용

Yewon Choi·2021년 1월 27일
0

Python

목록 보기
29/29

도입

알고리즘을 풀다가 풀이를 해석하는데 reduce()함수를 사용한 코드가 있어서 코드를 분석하다 reduce()함수 사용법을 찾아보게 되었다.

생각보다 엄청 유용한 함수를 찾은 거 같다!

reduce() 함수 사용법

lambda 사용법은 다른 포스팅에 적었으니 참고해서 보면 좋을 거 같다.

reduce(함수, 순서형 자료)

from functools import reduce
reduce(lambda x, y : x+y, [0,1,2,3,4]

결과: 10
(출처: wikidocs)

직접 실습하며 알게 된 사실

ex1)

from functools import reduce
b =  [1,2,3,4,5,6,7,8,9,10,11]
print(reduce(lambda x, y : x+y, b))

👉 1차원 리스트에서 reduce함수를 사용하면 리스트 안의 총합이 구해진다.
sum(b)와 동일한 값 출력.
1차원 리스트의 총합을 알고 싶으면 간단하게 sum()함수를 사용하는 것이 덜 번거로울 것 같다.

ex2)

from functools import reduce
a =  [[1,2],[3,4],[5,6],[7,8],[9,10],[10,11]]
print(reduce(lambda x, y : x+y, a))

👉 정말 유용한 쓰임은 바로 이거라고 생각한다.
2차원 리스트를 1차원 리스트로 합치고 싶을 경우 사용하면 될 거 같다.

👉 2차원 1차원으로 바꾸는 경우가 더 없을까? 라는 생각이 들었다. 찾아본 결과, 다양한 방법이 존재하는 걸 알게 되었다.


my_list = [[1, 2], [3, 4], [5, 6]]

# 방법 1 - sum 함수
answer = sum(my_list, [])

# 방법 2 - itertools.chain
import itertools
list(itertools.chain.from_iterable(my_list))

# 방법 3 - itertools와 unpacking
import itertools
list(itertools.chain(*my_list))

# 방법4 - list comprehension 이용
[element for array in my_list for element in array]

# 방법 5 - reduce 함수 이용1
from functools import reduce
list(reduce(lambda x, y: x+y, my_list))

# 방법 6 - reduce 함수 이용2
from functools import reduce
import operator
list(reduce(operator.add, my_list))

# 방법 7 - numpy 라이브러리의 flatten 이용
import numpy as np
np.array(my_list).flatten().tolist()

(출처:https://programmers.co.kr/learn/courses/4008/lessons/12738)

profile
https://github.com/devAon 찰나의 개발흔적을 남기는 개발블로그 입니다 🐥 https://aonee.tistory.com 에서 Velog로 블로그 이전 작업중입니다 ! 🎶

0개의 댓글