Lloyd Francis wrote: > I want to write a function that will calculate and return the sum of the > *n* highest value in a list *a. *Also, when n is less than 0, the answer > should be zero, and if n is greater than the number of elements in the > list, all elements should be included in the sum. > > In addition i want to write the code in a function with only one line of > code in it. > So far I have:- > > def sumHighest(a, n): > lambda a, n : sum(a[:n]) > > This doesn't work but i want to use *lambda *and the slice in the > function. > > An appropriate test would be:- > > input - sumHighest([1,2,3,4], 2) > output - 7 > > thanks L.
sum_highest = lambda items, n: sum(sorted(items, reverse=True)[:max(n, 0)]) or better: import heapq def sum_highest(items, n): return sum(heapq.nlargest(n, items)) _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor