Який самий ідіоматичний спосіб досягти чогось подібного в Haskell:
foldl (+) 0 [1,2,3,4,5]
--> 15
Або його еквівалент у Ruby:
[1,2,3,4,5].inject(0) {|m,x| m + x}
#> 15
Очевидно, що Python забезпечує reduce
функцію, яка є реалізацією складки, точно так само, як вище, однак мені сказали, що "пітонічним" способом програмування було уникати lambda
термінів і функцій вищого порядку, віддаючи перевагу розумінням списків, де це можливо. Отже, чи є кращий спосіб складання списку чи структури, подібної до списку, в Python, яка не є reduce
функцією, або це reduce
ідіоматичний спосіб досягнення цього?
sum
, можливо, ви хочете навести кілька різних типів прикладів.
sum()
насправді це забезпечує обмежений функціонал. sum([[a], [b, c, d], [e, f]], [])
повертається, [a, b, c, d, e, f]
наприклад.
+
у списках є лінійна операція часу як у часі, так і в пам'яті, що робить весь виклик квадратичним. Використання list(itertools.chain.from_iterable([a], [b,c,d],[e,f],[]])
лінійне в цілому - і якщо вам потрібно повторити його лише один раз, ви можете кинути виклик, list
щоб зробити його постійним з точки зору пам'яті.
sum
недостатньо добре?