Python에서 Reduce()는 주어진 함수를 반복 가능한 요소에 적용하여 단일 값으로 줄이는 내장 함수입니다.
Reduce()의 구문은 다음과 같습니다.
functools.reduce(function, iterable[, initializer])
- 그만큼 함수 인수 두 개의 인수를 사용하여 단일 값을 반환하는 함수입니다. 첫 번째 인수는 누적된 값이고 두 번째 인수는 반복 가능한 현재 값입니다.
- 그만큼 반복 가능한 인수는 감소할 값의 시퀀스입니다.
- 선택적 초기화 인수는 누적된 결과에 대한 초기 값을 제공하는 데 사용됩니다. 초기화 프로그램이 지정되지 않으면 iterable의 첫 번째 요소가 초기 값으로 사용됩니다.
다음은 숫자 목록의 합계를 찾기 위해 Reduce()를 사용하는 방법을 보여주는 예입니다.
# Examples to understand the reduce() function from functools import reduce # Function that returns the sum of two numbers def add(a, b): return a + b # Our Iterable num_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # add function is passed as the first argument, and num_list is passed as the second argument sum = reduce(add, num_list) print(f'Sum of the integers of num_list : {sum}') # Passing 10 as an initial value sum = reduce(add, num_list, 10) print(f'Sum of the integers of num_list with initial value 10 : {sum}')
산출:
Sum of the integers of num_list : 55 Sum of the integers of num_list with initial value 10 : 65
이 예에서는 Reduce() 함수를 사용하여 두 값의 합을 숫자 목록의 각 요소 쌍에 반환하는 add 함수를 적용하여 결과적으로 모든 요소의 합을 구합니다.
자바 if문
Reduce() 함수의 첫 번째 인수로 람다 함수를 사용해 보겠습니다.
# Importing reduce function from functools from functools import reduce # Creating a list my_list = [1, 2, 3, 4, 5] # Calculating the product of the numbers in my_list # using reduce and lambda functions together product = reduce(lambda x, y: x * y, my_list) # Printing output print(f'Product = {product}') # Output : Product = 120
어떻게 분석해 봅시다. 줄이다() 함수는 주어진 예에서 작동합니다.
Reduce() 함수는 함수와 반복 가능이라는 두 가지 인수를 사용합니다. 이 경우에는 람다 함수(lambda x, y: x * y)를 함수로 사용하고 숫자 목록을 반복 가능 항목으로 사용합니다.
- 람다 함수는 변수 x와 y를 받아들여 이를 곱하고 결과를 반환합니다. 람다 함수가 처음 실행되면 변수 x와 y는 각각 my_list의 첫 번째 요소와 두 번째 요소로 설정됩니다(예: x = 1 및 y = 2). 람다 함수는 이 두 숫자를 곱하고 결과(1 * 2 = 2)를 반환합니다.
- 람다 함수가 두 번째로 호출되면 x는 이전 호출의 결과(x = 2)로 설정되고 y는 숫자 목록의 세 번째 요소(예: y = 3)로 설정됩니다. 이 두 값을 곱하고 결과(2 * 3 = 6)를 반환합니다.
- 모든 요소가 처리될 때까지 my_list의 각 요소에 대해 이러한 방식으로 람다 함수가 반복적으로 호출됩니다. Reduce() 함수는 목록의 모든 요소의 곱을 반환한 후 product 변수에 120으로 할당됩니다. 이 곱은 다음과 같이 계산됩니다. ((((1 * 2) * 3)* 4)* 5) = 120.
- 마지막으로 print() 함수를 사용하여 120을 출력하는 product 변수의 값을 인쇄합니다.
연산자 함수가 있는 Reduce() 함수
람다 함수 대신 연산자 함수를 사용하면 코드를 더 간결하고 읽기 쉽게 만들 수 있습니다.
다음은 축소 함수의 첫 번째 인수로 연산자 함수를 사용하는 방법을 보여주는 예입니다.
# Python program to demonstrate # how to use operator functions with reduce function # Importing reduce function from functools import reduce # Importing operator import operator # Creating lists my_list1 = [1, 2, 3, 4, 5] my_list2 = ['I', 'Love', 'Javatpoint'] # Calculating the sum of the numbers of my_list1 # using reduce and operator.add sum = reduce(operator.add, my_list1) # Calculating the product of the numbers of my_list1 # using reduce and operator.mul product = reduce(operator.mul, my_list1) # Concatenating all the elements in my_list2 # using reduce and operator.concat concated_str1 = reduce(operator.concat, my_list2) # We can achieve the same output by using operator.add concated_str2 = reduce(operator.add, my_list2) # Printing result print(f'Sum of all elements in my_list1 : {sum}') print(f'Product of all elements in my_list1 : {product}') print(f'Concatenated string by using operator.concat : {concated_str1}') print(f'Concatenated string by using operator.add : {concated_str2}')
산출:
Sum of all elements in my_list1 : 15 Product of all elements in my_list1 : 120 Concatenated string by using operator.concat : ILoveJavatpoint Concatenated string by using operator.add : ILoveJavatpoint
이 코드는 Python에서 iterable에 대한 수학 및 문자열 연산을 수행하기 위해 Reduce() 함수 및 연산자 함수를 사용하는 방법을 보여줍니다.
jframe
Reduce() 함수와 Accumulate() 함수의 차이점 이해:
Python functools 모듈은 비슷한 방식으로 반복 가능 항목에 대해 작동하는 함수 Reduce() 및 Accumulate()를 제공합니다.
- 그만큼 줄이다 () 그리고 축적하다 () 함수는 둘 다 두 개의 인수, 즉 iterable 자체와 수행할 작업을 설명하는 함수를 허용한다는 점에서 유사합니다. 그러나 작업 결과를 처리하는 방식은 서로 가장 많이 다른 부분입니다.
- 그만큼 줄이다 () 함수는 결과와 다음 요소에 대해 동일한 작업을 실행하기 전에 반복 가능 항목의 처음 두 요소에 대해 작업을 수행합니다. 이 프로세스는 iterable의 모든 요소가 처리될 때까지 반복됩니다. 작업의 최종 출력은 단일 결과로 반환됩니다.
- 동안 축적하다 () 함수는 또한 결과 및 후속 요소에 대해 동일한 작업을 수행하기 전에 반복 가능 항목의 처음 두 요소에 작업을 적용하며, activate() 함수는 작업의 중간 결과를 포함하는 반복자를 반환합니다. 즉, 각 요소를 처리한 후 축적하다 () 함수는 작업 결과를 나타내는 일련의 값을 제공합니다.
Accumulate()와 Reduce()의 차이점을 이해하는 예:
# Python Program to demonstrate the difference # between reduce and accumulate # Importing reduce and accumulate function from functools import reduce, accumulate # Creating a list my_list = [1, 2, 3, 4, 5] # Using reduce() to calculate the product of all numbers product = reduce(lambda x, y: x * y, my_list) print(f'Product using reduce() : {product}') # Output: 120 # Using accumulate() to calculate the product of all numbers products = list(accumulate(my_list, lambda x, y: x * y)) print(f'Products using accumulate() : {products}')# Output: [1, 2, 6, 24, 120]
이 예에는 숫자 [1, 2, 3, 4, 5] 목록이 있습니다. 우리는 사용 줄이다() 모든 숫자의 곱을 계산하면 단일 값 120이 반환됩니다.
우리는 또한 사용합니다 축적하다() 모든 숫자의 곱을 계산합니다. 그러나 단일 값을 반환하는 대신 축적하다() 일련의 중간 결과([1, 2, 6, 24, 120])를 생성하는 반복자를 반환합니다.
따라서 두 제품의 주요 차이점은 줄이다() 그리고 Accumulator()는 Reduce()가 작업의 최종 출력인 단일 값을 반환한다는 것입니다. 대조적으로, stack()은 일련의 중간 결과를 생성하는 반복자를 반환합니다.