Haskell에서 다음과 같은 것을 달성하는 가장 관용적 인 방법은 무엇입니까?
foldl (+) 0 [1,2,3,4,5]
--> 15
또는 Ruby에서 이에 상응하는 것 :
[1,2,3,4,5].inject(0) {|m,x| m + x}
#> 15
분명히 파이썬은 reduce
위와 똑같이 폴드 구현 인 함수를 제공 하지만, 프로그래밍의 'pythonic'방식은 가능한 경우 lambda
목록 이해를 선호하는 용어와 고차 함수 를 피하는 것이라고 들었습니다 . 따라서 reduce
함수 가 아닌 Python에서 목록 또는 목록과 유사한 구조를 접는 선호하는 방법 reduce
이 있습니까? 아니면 이것을 달성하는 관용적 방법입니까?
sum
몇 가지 다른 유형의 예제를 제공 할 수 있습니다.
sum()
실제로 이것으로 제한된 기능을 제공합니다. 예를 들어 sum([[a], [b, c, d], [e, f]], [])
반환 [a, b, c, d, e, f]
합니다.
+
목록에 대한 작업은 시간과 메모리 모두에서 선형 시간 연산이므로 전체 호출을 2 차로 만듭니다. 사용 list(itertools.chain.from_iterable([a], [b,c,d],[e,f],[]])
은 전체적으로 선형 적이며 한 번만 반복해야하는 경우 호출을 삭제하여 list
메모리 측면에서 일정하게 만들 수 있습니다.
sum
충분하지 않습니까?