请考虑以下事项: p1=1; p2=5; p3=7; 最高=最大(p1,p2,p3)。
max 函数将返回 7。我希望创建一个类似的函数,它将返回“p3”。我为上面的例子创建了一个小函数(通过简单的比较),如下所示。但是,当参数数量增加时,我遇到了麻烦。
def highest(p1,p2,p3):
if (p1>p2) and (p1>p3):
return "p1"
if (p2>p1) and (p2>p3):
return "p2"
if (p3>p1) and (p3>p1):
return "p3"
有没有更简单的方法来做到这一点>
请您参考如下方法:
更新:Paul Hankin 指出 max() 采用了一个我不知道的关键函数。所以:
>>> def argmax(**kw):
... return max(kw, key=kw.get)
...
>>> argmax(foo=3, bar=5, frotz=1, kaka=-3)
'bar'
完整性的其他解决方案:
在 Python 2.7 和 3.x 中,您可以使用字典推导。
>>> def argmax(**kw):
... wk = {v:k for k,v in kw.items()}
... return wk[max(wk)]
...
>>> argmax(foo=3, bar=5, frotz=1, kaka=-3)
'bar'
字典理解很简洁。 :)
在早期版本的 Python 中,您可以这样做:
>>> def argmax(**kw):
... wk = dict([(v,k) for k,v in kw.items()])
... return wk[max(wk)]
...
>>> argmax(foo=3, bar=5, frotz=1, kaka=-3)
'bar'
这将在 Python 2.2 左右之后的任何东西中工作。
