reduce() 함수는 함수를 일련의 요소에 적용하고 단일 값으로 줄이는 데 사용되는 Python의 내장 함수입니다.
두 개의 인수를 사용합니다. 첫 번째 인수는 적용할 함수이고 두 번째 인수는 작동할 요소의 시퀀스입니다.
구문은 다음과 같습니다.
reduce(function, sequence)
함수 인수는 두 개의 인수를 취하고 단일 값을 반환하는 함수입니다. sequence 인수는 함수가 적용될 일련의 요소입니다. 이 함수는 시퀀스의 처음 두 요소에 적용된 다음 해당 작업의 결과와 시퀀스의 다음 요소 등에 적용되며 모든 요소가 처리되고 단일 값이 반환될 때까지 계속됩니다.
reduce() 함수는 일련의 요소에 함수를 적용하고 단일 값으로 줄여야 할 때 유용합니다. 다음과 같은 다양한 상황에서 사용할 수 있습니다.
- 숫자 목록의 합계 또는 곱 찾기
- 문자열 목록 연결
- 목록에서 최대값 또는 최소값 찾기
- 중첩 목록 병합
- 중복 또는 원치 않는 요소를 제거하기 위해 목록 필터링
일반적으로 일련의 요소에 함수를 적용하고 단일 값으로 줄여야 하는 모든 상황은 reduce() 함수를 사용하기에 좋은 후보가 될 수 있습니다.
사용법
1) functools 모듈에서 reduce() 함수를 가져옵니다.
from functools import reduce
2) 일련의 요소에 적용할 함수를 정의합니다. 이 함수는 두 개의 인수를 사용하고 단일 값을 반환해야 합니다. 예를 들어 숫자 목록의 곱을 찾으려면 다음과 같은 함수를 정의할 수 있습니다.
def multiply(x, y):
return x * y
3) 조작하려는 요소의 순서를 정의하십시오. 예를 들어 숫자 1, 2, 3, 4의 곱을 찾으려면 다음과 같이 목록을 정의할 수 있습니다.
numbers = [1, 2, 3, 4]
4) 함수와 시퀀스를 인수로 사용하여 reduce() 함수를 호출합니다. 예를 들어 숫자 목록에 있는 숫자의 곱을 찾으려면 다음 코드를 사용할 수 있습니다.
product = reduce(multiply, numbers)
이 코드는 multiply() 함수를 숫자 목록의 처음 두 요소(1과 2)에 적용한 다음 결과(2)와 다음 요소(3)에 적용하는 식으로 모든 요소가 처리되고 단일 값(24)이 반환됩니다.
또는 다음과 같이 람다 함수를 사용하여 적용하려는 함수를 정의할 수 있습니다.
product = reduce(lambda x, y: x * y, numbers)
이 코드는 이전 예제와 동일하지만 명명된 함수 대신 람다 함수를 사용합니다.
이것이 Python에서 reduce() 함수의 기본 사용법입니다. 적용하는 함수는 연관적이어야 합니다. 즉, 요소의 순서가 결과에 영향을 주지 않아야 합니다. 그렇지 않으면 결과가 예기치 않을 수 있습니다.
다음은 숫자 목록의 곱을 찾기 위해 reduce() 함수를 사용하는 방법의 예입니다.
from functools import reduce
numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product) # Output: 120
이 예제에서 reduce() 함수는 람다 함수를 숫자 목록에 적용하는 데 사용됩니다. 람다 함수는 두 개의 인수 x와 y를 사용하고 해당 제품 x * y를 반환합니다. 그런 다음 reduce() 함수는 이 함수를 목록의 처음 두 요소(1과 2)에 적용한 다음 해당 연산의 결과와 목록의 다음 요소(2와 3) 등에 적용합니다. 요소가 처리되었으며 단일 값(120)이 반환됩니다.
Python에서 reduce() 함수를 사용할 때 유의해야 할 몇 가지 사항이 있습니다.
적용하는 기능은 연관적이어야 합니다. 즉, 기능이 요소에 적용되는 순서가 결과에 영향을 주지 않아야 합니다. 함수가 연관되지 않으면 결과가 예상하지 못할 수 있습니다. 예를 들어 숫자 목록 간의 차이를 찾기 위해 reduce() 함수를 사용하면 빼기가 연관 작업이 아니기 때문에 예상대로 작동하지 않습니다.
시퀀스는 비어 있으면 안 됩니다. reduce() 함수에 빈 시퀀스를 전달하면 "reduce() of empty sequence with no initial value"라는 메시지와 함께 TypeError가 발생합니다. 이 오류를 방지하기 위해 reduce() 함수에 대한 세 번째 인수로 초기 값을 제공할 수 있습니다. 이 초기 값은 시퀀스를 줄일 때 함수의 첫 번째 인수로 사용됩니다.
이 함수는 두 개의 인수를 가져야 합니다. reduce() 함수에 전달하는 함수는 두 개의 인수를 취하고 단일 값을 반환해야 합니다. 함수가 두 개보다 많거나 적은 인수를 사용하거나 단일 값을 반환하지 않으면 TypeError가 발생합니다.
reduce() 함수는 일부 대안보다 느립니다. 경우에 따라 루프 또는 목록 이해를 사용하는 것이 reduce() 함수를 사용하는 것보다 빠를 수 있습니다. 이는 함수를 반복적으로 호출하는 오버헤드가 상당할 수 있는 작은 시퀀스의 경우 특히 그렇습니다.
전반적으로 reduce() 함수는 Python에서 시퀀스 작업을 위한 강력한 도구이지만 올바르게 사용하고 제한 사항을 인식하는 것이 중요합니다.
'파이썬' 카테고리의 다른 글
[Python]#26 파이썬 간단한 TIP&요령 (0) | 2023.03.19 |
---|---|
[Python]#25 람다함수 iterable (0) | 2023.03.17 |
[Python]#23 특정 기준 충족하는 모든 개체 filter() (0) | 2023.03.14 |
[Python]#22 map() (0) | 2023.03.13 |
[Python]#21 'datetime()' 날짜와 시간 함수 (0) | 2023.03.12 |