Python Language
줄이다
수색…
통사론
- reduce (함수, iterable [, initializer])
매개 변수
매개 변수 | 세부 |
---|---|
기능 | iterable을 줄이기 위해 사용되는 함수 (두 개의 인수를 취해야 함). ( 위치 지정 전용 ) |
반복 가능한 | iterable은 줄어들 것입니다. ( 위치 지정 전용 ) |
이니셜 라이저 | 감소의 시작 값. ( 선택 , 위치 한정 ) |
비고
reduce
는 항상 가장 효율적인 함수가 아닐 수도 있습니다. 일부 유형에는 동일한 기능 또는 메소드가 있습니다.
addable 요소 (문자열 아님)를 포함하는 시퀀스의 합계에 대한
sum()
) :sum([1,2,3]) # = 6
문자열의 연결을위한
str.join
:''.join(['Hello', ',', ' World']) # = 'Hello, World'
next
발전기와 함께reduce
비해 단락 변종 수reduce
:# First falsy item: next((i for i in [100, [], 20, 0] if not i)) # = []
개요
# No import needed
# No import required...
from functools import reduce # ... but it can be loaded from the functools module
from functools import reduce # mandatory
reduce
의 다음 요소를 반복하는 기능을 적용하여 반복 가능한 감소 iterable
하고, 지금까지의 누적 결과.
def add(s1, s2):
return s1 + s2
asequence = [1, 2, 3]
reduce(add, asequence) # equivalent to: add(add(1,2),3)
# Out: 6
이 예제에서는 우리 자신의 add
함수를 정의했다. 그러나 파이썬에는 operator
모듈에 표준 기능이 있습니다.
import operator
reduce(operator.add, asequence)
# Out: 6
reduce
는 또한 시작 값을 전달할 수 있습니다.
reduce(add, asequence, 10)
# Out: 16
reduce 사용
def multiply(s1, s2):
print('{arg1} * {arg2} = {res}'.format(arg1=s1,
arg2=s2,
res=s1*s2))
return s1 * s2
asequence = [1, 2, 3]
initializer
가 주어지면 함수는 이니셜 라이저와 첫 번째 iterable 요소에 적용하여 시작됩니다.
cumprod = reduce(multiply, asequence, 5)
# Out: 5 * 1 = 5
# 5 * 2 = 10
# 10 * 3 = 30
print(cumprod)
# Out: 30
initializer
매개 변수가 없으면 첫 번째 두 목록 요소에 함수를 적용하여 reduce
가 시작됩니다.
cumprod = reduce(multiply, asequence)
# Out: 1 * 2 = 2
# 2 * 3 = 6
print(cumprod)
# Out: 6
누적 제품
import operator
reduce(operator.mul, [10, 5, -3])
# Out: -150
임의 / 모두의 비 단락 회로
reduce
는 iterable
이 completly iterated되기 전에 반복을 종료하지 않으므로 any()
또는 all()
단락 회로를 생성하는 데 사용할 수 있습니다.
import operator
# non short-circuit "all"
reduce(operator.and_, [False, True, True, True]) # = False
# non short-circuit "any"
reduce(operator.or_, [True, False, False, False]) # = True
시퀀스의 첫 번째 truthy / falsy 요소 (없으면 마지막 요소)
# First falsy element or last element if all are truthy:
reduce(lambda i, j: i and j, [100, [], 20, 10]) # = []
reduce(lambda i, j: i and j, [100, 50, 20, 10]) # = 10
# First truthy element or last element if all falsy:
reduce(lambda i, j: i or j, [100, [], 20, 0]) # = 100
reduce(lambda i, j: i or j, ['', {}, [], None]) # = None
lambda
함수를 만드는 대신 일반적으로 명명 된 함수를 만드는 것이 좋습니다.
def do_or(i, j):
return i or j
def do_and(i, j):
return i and j
reduce(do_or, [100, [], 20, 0]) # = 100
reduce(do_and, [100, [], 20, 0]) # = []
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow