Pythonic方式解决了一个小任务

时间:2015-03-24 12:21:53

标签: python python-2.7

我有一个函数可以返回某些操作列表的值。我需要得到一个(动作,值)元组的最小值或最大值(取决于minmaxFunction)。

minmaxFunction,可以是min或max:

minmaxFunction = min
or
minmaxFunction = max

现在我用:

bestValue = None
bestAction = None

for action in moves:
    subValue = someFunction(action)
    if bestValue is None or minmaxFunction(bestValue, subValue) != bestValue:
        bestValue = subValue
        bestAction = action

return bestAction, bestValue

我很确定有更好的(pythonic)方法。也许像是

listOfTuples = [(action, someFunction(action)) for action in moves]
and here something with reduce() ????

2 个答案:

答案 0 :(得分:3)

您可以像使用minmaxmin一样使用max功能:

lst = [-6,-5,-4,4,5,6]

def foo(x):
    return x*x

minmax = min

print minmax((foo(x), x) for x in lst)[1]  # -4

答案 1 :(得分:2)

这是否回答了你的问题:

sorted([(action, someFunction(action)) for action in moves], key=lambda x:x[1])[0]

它使用元组的第二个值作为键对列表进行排序,然后返回数组的第一个。如果你想要第一个或最后一个,我不能完全确定;最后将0更改为-1