说我有一个值列表:
l = [1, -1]
我希望获取更接近其他值的列表值,例如0, 我可以用这个:
min(l, key=lambda v: abs(v - 0))
# prints 1
但如果我改变列表中值的顺序,如:
l = [-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)
。