On 04/11/16 16:44, Lloyd Francis wrote: It looks suspiciously like you posted this same message from two addresses with different subjects, please don't do that as it splits the responses and makes searching archives more difficult.
> 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. I'm not totally clear what you mean. Lets conmsider the value of n: if n < 0 return 0 if n == 0 return ??? if n > len(lst) return sum(lst) if n > 0 and n < len(lst) return sum of n "highest" values - define highest? eg. What are the 3 highest values in the list [1,7,3,9,2,5,1,9] are they: [5,1,9] - highest positions [9,9,7] - highest valued items [9,7,5] - highest individual values or something else? Can you clarify the 2nd and last cases please? > In addition i want to write the code in a function with only one line of > code in it. This is a strange and wholly artificial request. We can write almost any function with one line but it's rarely a good idea. Let's ignore it for now and focus on writing a function that works. If we really need to we can reduce it to one line later. > So far I have:- > > def sumHighest(a, n): > lambda a, n : sum(a[:n]) This makes no sense since your function does not return any value. And the lambda line defines a function but never calls it. I'd suggest following the logic of your requirement above: def sumHighest(a,n): if n < 0: return 0 if n > len(a): return sum(a) if n == 0: return ???? # you must clarify else: newlist = find_N_highest(a,n) return sum(newlist) > This doesn't work but i want to use *lambda *and the slice in the function. Its not clear what role the slice plays until we understand what is meant by "highest" And lambda just returns a function which is not what you want. You may need a lambda to filter your list but again we don't know until we understand your requirement better. > An appropriate test would be:- > > input - sumHighest([1,2,3,4], 2) > output - 7 This could mean any of the cases I gave above, it doesn't clarify anything. -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor