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

ang*_*lar 2 python distance min

说我有一个值列表:

l = [1, -1]
Run Code Online (Sandbox Code Playgroud)

并且我想获取更接近其他值的列表值,例如0,我可以使用此:

min(l, key=lambda v: abs(v - 0))
# prints 1
Run Code Online (Sandbox Code Playgroud)

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

l = [-1, 1]
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*son 6

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

min(l, key=lambda v: (abs(v - 0), v < 0))
Run Code Online (Sandbox Code Playgroud)

比较元组时,第一项是优先级,第二项是第二项.因此,第二项充当"决胜局".因为False < True,这将优先1(变为(1, False))-1(成为(1, True).