[[x,f(x)] for x in list that maximizes f(x)] <--newbie help
Bengt Richter
bokr at oz.net
Fri Dec 2 09:05:47 CET 2005
On 1 Dec 2005 05:45:54 -0800, "Niels L Ellegaard" <niels.ellegaard at gmail.com> wrote:
>I just started learning python and I have been wondering. Is there a
>short pythonic way to find the element, x, of a list, mylist, that
>maximizes an expression f(x).
>
>In other words I am looking for a short version of the following:
>
>pair=[mylist[0],f(mylist[0])]
>for x in mylist[1:]:
> if f(x) > pair[1]:
> pair=[x,f(x)]
>
Reversing the order of the pair:
>>> mylist = range(10)
>>> def f(x): return 10-(x-5)**2
...
>>> [f(x) for x in mylist]
[-15, -6, 1, 6, 9, 10, 9, 6, 1, -6]
Then one line should do it:
>>> max((f(x),x) for x in mylist)
(10, 5)
Ok, be picky ;-)
>>> pair = list(reversed(max((f(x),x) for x in mylist)))
>>> pair
[5, 10]
Regards,
Bengt Richter
More information about the Python-list
mailing list