2

假设我有一个值列表:

l = [1, -1]

我想取更接近其他值的列表值,例如 0,我可以这样做:

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

但是如果我更改列表中值的顺序,例如:

l = [-1, 1]

我在上面调用了相同的函数-1而不是1,那么在相同距离处同时存在正值和负值的情况下,我怎样才能始终获得正值?

4

1 回答 1

7

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

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

比较元组时,第一项优先,其次是第二项。因此,第二项用作“决胜局”。由于False < True,这将优先考虑1(变为(1, False))到-1(变为(1, True).

于 2013-04-06T20:38:18.130 回答