728x90
reduce 함수는 파이썬의 내장 함수로, iterable(반복 가능한) 객체의 요소를 반복적으로 결합하여 단일 값으로 줄이는 기능을 제공합니다. reduce 함수는 functools 모듈에 속해 있으므로, functools.reduce 형식으로 import 해야 합니다.
reduce 함수는 다음과 같은 구문을 가집니다:
reduce(function, iterable[, initializer])
- function: 반복 가능한 객체의 요소를 결합하는 데 사용되는 함수입니다. 이 함수는 두 개의 인수를 받아야 합니다. 첫 번째 인수는 누적 값(accumulate value), 두 번째 인수는 현재 요소의 값입니다.
- iterable: 값을 줄이는 대상이 되는 반복 가능한 객체입니다.
- initializer (선택적): 누적 값의 초기값을 설정합니다. 이 값이 제공되지 않으면 첫 번째 요소가 초기값으로 사용됩니다.
reduce 함수의 작동 방식은 다음과 같습니다:
- initializer 값이 제공되면, 누적 값으로 사용됩니다. 그렇지 않으면 첫 번째 요소가 초기값으로 사용됩니다.
- 누적 값과 iterable의 첫 번째 요소를 function에 전달하여 새로운 누적 값을 생성합니다.
- 위 단계를 반복하면서, 새로운 누적 값과 iterable의 다음 요소를 function에 전달하여 계속해서 새로운 누적 값을 생성합니다.
- iterable의 모든 요소에 대해 위 과정을 반복하고, 최종적으로 마지막 누적 값을 반환합니다.
간단한 예제를 살펴보겠습니다. 아래 코드는 reduce 함수를 사용하여 리스트의 모든 요소를 곱하는 예제입니다:
from functools import reduce
numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product) # 출력: 120
위 코드에서 reduce 함수는 lambda 함수를 사용하여 두 개의 값을 곱하는 연산을 수행합니다. 초기값이 없으므로 리스트의 첫 번째 요소인 1이 초기값으로 사용됩니다. 따라서 reduce 함수는 다음과 같은 계산을 수행합니다:
(((1 * 2) * 3) * 4) * 5 = 120
따라서 결과로 120이 출력됩니다.
몇가지 예제를 더 살펴보겠습니다.
# Import
from functools import reduce
# Find the sum of all elements in a list
numbers = [1, 2, 3, 4, 5]
sum = reduce(lambda x, y: x + y, numbers)
print("Sum:", sum) #Sum: 15
# Find the longest word in a list
words = ['Python', 'Spark']
longest_word = reduce(lambda x, y: x if len(x) > len(y) else y, words)
print("Longest word:", longest_word) #Longest word: Python
# Find the union of of sets
sets = [{1, 2, 3}, {2, 3, 4}]
union = reduce(lambda x, y: x | y, sets)
print("Union:", union) #Union: {1, 2, 3, 4}
[참조]