알고리즘을 풀다가 풀이를 해석하는데 reduce()함수를 사용한 코드가 있어서 코드를 분석하다 reduce()함수 사용법을 찾아보게 되었다.
생각보다 엄청 유용한 함수를 찾은 거 같다!
lambda 사용법은 다른 포스팅에 적었으니 참고해서 보면 좋을 거 같다.
from functools import reduce
reduce(lambda x, y : x+y, [0,1,2,3,4]
결과: 10
(출처: wikidocs)
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()함수를 사용하는 것이 덜 번거로울 것 같다.
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)