在min python函数中优先于正值而不是负值。

时间:2013-04-06 20:35:51

标签: python distance min

说我有一个值列表:

l = [1, -1]

我希望获取更接近其他值的列表值,例如0, 我可以用这个:

min(l, key=lambda v: abs(v - 0))
# prints 1

但如果我改变列表中值的顺序,如:

l = [-1, 1]

我在上面调用相同的函数我得到-1而不是1,所以我怎么能总是得到 在同一距离有正值和负值的正值?

1 个答案:

答案 0 :(得分:6)

你可以让lambda函数返回一个元组,第二个项目表示它是正数还是负数:

min(l, key=lambda v: (abs(v - 0), v < 0))

比较元组时,第一项是优先,第二项是第二项。因此,第二项充当“决胜局”。自False < True起,这会优先1(变为(1, False))到-1(变为(1, True)